【问题标题】:Concatenating multiple pandas dataframes when columns are not aligned当列未对齐时连接多个熊猫数据框
【发布时间】:2019-09-09 10:04:31
【问题描述】:

我有 3 个数据框:

df1

A B C
1 1 1
2 2 2

df2

A B C
3 3 3
4 4 4

df3

A B
5 5

所以我想将所有数据帧合并为以下一个:

A B C
1 1 1
2 2 2
3 3 3
4 4 4
5 5 NaN

我尝试使用pd.concat([df1,df2,df3])axis=0axis=1,但它们都没有按预期工作。

【问题讨论】:

  • 你得到的输出是什么?

标签: python pandas


【解决方案1】:
df = pd.concat([df1,df2,df3], ignore_index=True)

df.fillna("NA", inplace=True)

【讨论】:

  • 在我看来df.fillna("NA", inplace=True) 不是个好主意,因为得到混合值 - 带有字符串的数字和一些熊猫函数失败。
【解决方案2】:

如果有相同的公共列名称,工作得很好——公共列正确对齐:

print (df1.columns.tolist())
['A', 'B', 'C']
print (df2.columns.tolist())
['A', 'B', 'C']
print (df3.columns.tolist())
['A', 'B']

如果可能的 som 尾随空格,可以使用 str.strip:

print (df1.columns.tolist())
['A', 'B ', 'C']

df1.columns = df1.columns.str.strip()

print (df1.columns.tolist())
['A', 'B', 'C']

另外参数ignore_index=Trueconcat之后的默认RangeIndex,用于避免重复索引并添加参数sort以避免FutureWarning

df = pd.concat([df1,df2,df3], ignore_index=True, sort=True)
print (df)
   A  B    C
0  1  1  1.0
1  2  2  2.0
2  3  3  3.0
3  4  4  4.0
4  5  5  NaN

【讨论】:

    【解决方案3】:

    我认为你需要告诉concat 忽略index

    result = pd.concat([df1,df2,df3], ignore_index=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-12
      • 2021-08-16
      • 2023-02-10
      • 2014-03-14
      • 2014-07-03
      相关资源
      最近更新 更多