我只是想添加存储在字典中的数据框。直觉上我想循环字典。但是,我没有零值的初始数据帧。优雅地实现这一目标的最佳方法是什么?目前我正在做以下事情:
dict = {'B' :df1, 'C':df2, 'D': df3}
total = dict['B'] + dict['C'] + dict['D']
dfs是从读取csv文件初始化的,可能超过3个。
如何在循环中完成此操作?
答案 0 :(得分:1)
您可以将dict值传递给concat
,例如:
In [195]:
d = {}
d['a'] = pd.DataFrame({'a':np.arange(5)})
d['b'] = pd.DataFrame({'b':np.arange(5)})
total = pd.concat(d.values(), axis=1)
total.sum()
Out[195]:
a 10
b 10
dtype: int64
答案 1 :(得分:1)
假设您要添加(而不是another answer所示的连接)这些DataFrame,您可以使用以下内容:
#!/usr/bin/env python3
# coding: utf-8
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(3,2))
df2 = pd.DataFrame(np.random.rand(3,2))
df3 = pd.DataFrame(np.random.rand(3,2))
df4 = pd.DataFrame(np.random.rand(3,2))
d = {'a': df1, 'b': df2, 'c': df3, 'd': df4}
total = 0
for key, df in d.items():
total += df
答案 2 :(得分:0)
您可以创建一个面板然后求和:
pd.Panel(dict).sum()
另一方面,覆盖内置dict
功能
答案 3 :(得分:0)
只是为了完整性,这是证明问题和解决方案的原因:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(3,2))
df2 = pd.DataFrame(np.random.rand(3,2))
df3 = pd.DataFrame(np.random.rand(3,2))
df4 = pd.DataFrame(np.random.rand(3,2))
d = {'a': df1, 'b': df2, 'c': df3, 'd': df4}
for key, df in d.items():
if 'total' in locals():
print("found")
total += df
else:
print("not")
total = df
print(total)
del total