Python Pandas DataFrames

时间:2015-06-30 14:39:02

标签: python pandas

我只是想添加存储在字典中的数据框。直觉上我想循环字典。但是,我没有零值的初始数据帧。优雅地实现这一目标的最佳方法是什么?目前我正在做以下事情:

dict = {'B' :df1, 'C':df2, 'D': df3}

total = dict['B'] + dict['C'] + dict['D']

dfs是从读取csv文件初始化的,可能超过3个。

如何在循环中完成此操作?

4 个答案:

答案 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