Pandas concat 导致 NaN 行?

lte*_*e__ 2 concatenation pandas

我有两个行数相同的数据框:1434,我想将它们连接到轴 1 中:

res = pd.concat([df_resolved, df1], axis=1)
Run Code Online (Sandbox Code Playgroud)

这两个数据框没有任何同名的列。我只想加入他们,例如:

df1:        df2:
col1 col2 | col3 col4
1    0    | 9    0
6    0    | 0    0

=
concatenated_df:
col1 col2 col3 col4
1    0    9    0
6    0    0    0
Run Code Online (Sandbox Code Playgroud)

这在这样的一个小例子上工作得很好,但由于某种原因,如果我在我的原始数据集上尝试它,我最终会得到很多 NaN 行,这对我来说太大而无法监督(我试图加入 1434x24 和 1434x17458 形状的数据帧)。所以结果有点像:

concatenated_df:
col1 col2 col3 col4
col1 col2 col3 col4
1    0    9    0
6    0    0    0
NaN  NaN  0    0
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么。你有什么想法是如何发生的吗?我尝试通过将 _xyz 字符串附加到列名来重命名较小数据框中的所有列,但问题保持不变。

小智 7

此处类似问题的答案可能会有所帮助:pandas concat生成 nan 值

简而言之,如果两个数据帧的行索引有任何不匹配,则连接的数据帧将在不匹配的行中包含 NaN。如果您不需要保持索引的df.reset_index(drop=True, inplace=True)原样,则在连接之前在两个数据集上使用应该可以解决问题。

  • 我认为您的回答应该是公认的,因为它与 Pandas 更相关。 (2认同)

WeN*_*Ben 5

我曾经有同样的问题,当我生成训练和测试集时。这是我的解决方案,但是,我不知道为什么pd.concat在这种情况下也不起作用......

l1=df.values.tolist()
l2=df_resolved.values.tolist()
for i in range(len(l1)):
    l1[i].extend(l2[i])

df=pd.DataFrame(l1,columns=df.columns.tolist()+df_resolved.columns.tolist())
Run Code Online (Sandbox Code Playgroud)