gpt4 book ai didi

python - 如何连接多个Dataframe

转载 作者:行者123 更新时间:2023-11-30 22:48:17 24 4
gpt4 key购买 nike

结果数据帧应该是其他三个数据帧的组合版本:dfadfbdfc并且应该是:

     a     b    c
0 1.0 0.0 0
1 0 10.0 0
2 0 0 100

不幸的是,下面的代码产生了不同的结果:

result = pd.DataFrame()
dfa = pd.DataFrame({'a':[1]})
dfb = pd.DataFrame({'b':[10]})
dfc = pd.DataFrame({'c':[100]})

for df in [dfa, dfb, dfc]:
result = result.reindex(columns=df.columns, fill_value=0)
result = pd.concat([result, df], ignore_index=True)

print result

结果如下:

     c
0 0
1 0
2 100

如何才能获得所需的结果

最佳答案

我认为你需要Index.union用于查找重新索引的最终列名称:

cols = dfa.columns.union(dfb.columns).union(dfc.columns)
print (cols)
Index(['a', 'b', 'c'], dtype='object')

然后在循环中重新索引并将新的DataFrame附加到DataFrames dfs列表中,最终是concat :

dfs = []
for df in [dfa, dfb, dfc]:
result = df.reindex(columns=cols, fill_value=0)
dfs.append(result)

result = pd.concat(dfs, ignore_index=True)
print (result)
a b c
0 1 0 0
1 0 10 0
2 0 0 100
<小时/>

如果在数据帧中 dfadfbdfc 不是 NaN 值,则可以使用 DataFrame.fillna ,但更一般的使用 NaN 是第一个解决方案:

result = pd.concat([dfa, dfb,dfc], ignore_index=True).fillna(0).astype(int)
print (result)
a b c
0 1 0 0
1 0 10 0
2 0 0 100

带有 NaN 的示例:

dfa = pd.DataFrame({'a':[1]})
dfb = pd.DataFrame({'b':[10]})
dfc = pd.DataFrame({'c':[np.nan]})

cols = dfa.columns.union(dfb.columns).union(dfc.columns)

dfs = []
for df in [dfa, dfb, dfc]:
result = df.reindex(columns=cols, fill_value=0)
dfs.append(result)

result = pd.concat(dfs, ignore_index=True)
print (result)
a b c
0 1 0 0.0
1 0 10 0.0
2 0 0 NaN

#data NaN are overwrite by 0
print (pd.concat([dfa, dfb,dfc], ignore_index=True).fillna(0).astype(int))
a b c
0 1 0 0
1 0 10 0
2 0 0 0

关于python - 如何连接多个Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com