python - 使用 pandas 对多个 csv 文件的数据求和

标签 python csv python-3.x pandas

我有 -many- csv 文件,其列数相同(行数不同),格式如下:

文件 1:

A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4

文件2:

*A1*,*B1*,*C1*
*A2*,*B2*,*C2*
*A3*,*B3*,*C3*

文件...

输出:

A1+*A1*+...,B1+*B1*+...,C1+*C1*+...
A2+*A2*+...,B2+*B2*+...,C2+*C2*+...
A3+*A3*+...,B3+*B3*+...,C3+*C3*+...
A4+...     ,B4+...     ,C4+...

例如:

文件 1:

1,0,0
1,0,1
1,0,0
0,1,0

文件 2:

1,1,0
1,1,1
0,1,0

输出:

2,1,0
2,1,2
1,1,0
0,1,0

我正在尝试使用 python.pandas 并正在考虑类似的方法来创建读取变量:

dic={}
for i in range(14253,14352):
        try:
                dic['df_{0}'.format(i)]=pandas.read_csv('output_'+str(i)+'.csv')
        except:
                pass

然后对列求和:

for residue in residues:
       for number in range(14254,14255):
               df=dic['df_14253'][residue]
               df+=dic['df_'+str(number)][residue]

residues 是作为列名称的字符串列表。

我遇到的问题是我的文件具有不同的行数,并且仅对 df1 的最后一行进行求和。我怎样才能将它们添加到最长文件的最后一行 - 这样就不会丢失数据?我认为 panda 的 groupby.sum 可能是一个选择,但我不明白如何使用它。

添加一个示例 - 现在我明白了:

文件 1:

1,0,0
1,0,1
1,0,0
0,1,0

文件 2:

1,1,0
1,1,1
0,1,0

文件3:

1,0,0
0,0,1
1,0,0
1,0,0
1,0,0
1,0,1

文件...:

输出:

3,1,0
2,1,3
2,1,0
1,1,0
1,0,0
1,0,1

最佳答案

您可以在 pandas 中使用 Panel,它是一个 3D 对象,数据帧的集合:

dfs={ i : pd.DataFrame.from_csv('file'+str(i)+'.csv',sep=',',\
header=None,index_col=None) for i in range(n)} # n files.
panel=pd.Panel(dfs)
dfs_sum=panel.sum(axis=0)

dfs 是数据帧的字典。面板使用 Nan 自动完成缺少值并进行良好的求和。例如:

n [500]: panel[1]
Out[500]: 
     0   1   2
0    1   0   0
1    1   0   1
2    1   0   0
3    0   1   0
4  NaN NaN NaN
5  NaN NaN NaN
6  NaN NaN NaN
7  NaN NaN NaN
8  NaN NaN NaN
9  NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN

In [501]: panel[2]
Out[501]: 
     0   1   2
0    1   0   0
1    1   0   1
2    1   0   0
3    0   1   0
4    1   0   0
5    1   0   1
6    1   0   0
7    0   1   0
8  NaN NaN NaN
9  NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN

In [502]: panel[3]
Out[502]: 
    0  1  2
0   1  0  0
1   1  0  1
2   1  0  0
3   0  1  0
4   1  0  0
5   1  0  1
6   1  0  0
7   0  1  0
8   1  0  0
9   1  0  1
10  1  0  0
11  0  1  0

In [503]: panel.sum(0)
Out[503]: 
    0  1  2
0   3  0  0
1   3  0  3
2   3  0  0
3   0  3  0
4   2  0  0
5   2  0  2
6   2  0  0
7   0  2  0
8   1  0  0
9   1  0  1
10  1  0  0
11  0  1  0

关于python - 使用 pandas 对多个 csv 文件的数据求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34815823/

相关文章:

python - for line in open(..) 在文件中间意外挂起

python - 如何完成 sys.stdin.readlines() 输入?

python - 如何在 Python 3 中通过 IP 获取 WhoIs 信息?

python - 使用 Mongodb 在 Python Flask 应用程序中查找返回空游标的查询

c# - 更改 ServiceStack.Text.CsvSerializer 中的 CSV 分隔符

python-3.x - 仅与交互式nvidia docker一起运行的python脚本

python - 如何访问特定 pdf 页面而不是整个文档的文本

django - 如何导入csv

php - 简单的 HTML DOM 内存问题

python - 表达式可以简化为 boolean 文字