首页 > 解决方案 > 使用“pd.concat”的问题。两个数据框的列长度和“NaN”值加倍,而不是合并行

问题描述

目标是本质上结合两个数据库并保留 Tk1P 数据帧中的字母表头,同时集成来自 Tk1L 数据帧的数据。不幸的是,我在尝试合并时得到了这个意想不到的结果。请查看 giphy 代码下方的链接,以获取显示数据库和 concat 结果的输出屏幕。如果有人有想法,那将非常有帮助。提前致谢。

Tk1D = pd.read_excel('C:\\Users\\Sam\\Desktop\\DF2.xlsx',1)
Tk1D = Tk1D.dropna()
Tk1D.drop(Tk1D.columns[[0, 1, 10]], inplace=True, axis=1)
#print("Tk1D: ", len(Tk1D), 'X', len(Tk1D.columns))
print('----------------------------------------------------------')

Tk1P = Tk1D.drop(['NT', 'PT'], axis=1)
Tk1P = Tk1P.drop(Tk1P.index[2:10035])
print(Tk1P)
print("Tk1P: ", len(Tk1P), 'X', len(Tk1P.columns))
print('----------------------------------------------------------')


Tk1L = xw.Book('C:\\Users\\Sam\\Desktop\\DF2.xlsx').sheets[1]
Tk1L = Tk1L.range('A2:N2').value
Tk1L = pd.DataFrame([Tk1L])
Tk1L.drop(Tk1L.columns[[0, 1, 10, 11, 12]], inplace=True, axis=1)
print(Tk1L)
print("Tk1L: ", len(Tk1L), 'X', len(Tk1L.columns))
print('----------------------------------------------------------')


TKP = pd.DataFrame(Tk1P.iloc[0]).transpose()
TKP.columns = Tk1P.columns
TKP = pd.concat([Tk1L, TKP], ignore_index=True)

print(TKP)

Giphy 数据框和 Concat 输出

标签: pythonpython-3.xpandaspython-2.7

解决方案


从您的输出看来,您df沿着列轴连接。

尝试append代替concat.

Tk1L.append(TKP)

编辑

看下面两行

TKP.columns = Tk1P.columns
TKP = pd.concat([Tk1L, TKP], ignore_index=True)

您将列名设置为TKP等于第一行中的列名。Tk1P但是在第二行中,您附加TKPTk1L (!)。所以以下应该解决你的问题

TKP.columns = Tk1L.columns
TKP = pd.concat([Tk1L, TKP], ignore_index=True)

因此,我猜你只是把它弄混了。

编辑两个

您的代码中还有另一个问题。

TKP = pd.DataFrame(Tk1P.iloc[0]).transpose()

transpose可能会把事情搞砸。Tk1P是一个2 x 9的数据框。但是当你转置它时,你会得到一个9 x 2的数据框。所以,如果你删除transpose,你应该没问题。

编辑三

如果您想要字母列名,请执行

TKP.columns = Tk1P.columns

推荐阅读