Python 使用pandas对多个csv文件中的数据求和

Python 使用pandas对多个csv文件中的数据求和,python,csv,python-3.x,pandas,Python,Csv,Python 3.x,Pandas,我有-many-csv文件,其列数相同(行数不同),模式如下: 文件1: A1,B1,C1 A2,B2,C2 A3,B3,C3 A4,B4,C4 1,0,0 1,0,1 1,0,0 0,1,0 1,0,0 1,0,1 1,0,0 0,1,0 文件2: *A1*,*B1*,*C1* *A2*,*B2*,*C2* *A3*,*B3*,*C3* 文件 输出: A1+*A1*+...,B1+*B1*+...,C1+*C1*+... A2+*A2*+...,B2+*B2*+...,C2+*C2*+

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

文件1:

A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4
1,0,0
1,0,1
1,0,0
0,1,0
1,0,0
1,0,1
1,0,0
0,1,0
文件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+...
2,1,0
2,1,2
1,1,0
0,1,0
3,1,0
2,1,3
2,1,0
1,1,0
1,0,0
1,0,1
例如:

文件1:

A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4
1,0,0
1,0,1
1,0,0
0,1,0
1,0,0
1,0,1
1,0,0
0,1,0
文件2:

1,1,0
1,1,1
0,1,0
1,1,0
1,1,1
0,1,0
输出:

A1+*A1*+...,B1+*B1*+...,C1+*C1*+...
A2+*A2*+...,B2+*B2*+...,C2+*C2*+...
A3+*A3*+...,B3+*B3*+...,C3+*C3*+...
A4+...     ,B4+...     ,C4+...
2,1,0
2,1,2
1,1,0
0,1,0
3,1,0
2,1,3
2,1,0
1,1,0
1,0,0
1,0,1
我正在尝试使用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]
残基是列名称的字符串列表

我有一个问题,我的文件有不同的行数,并且只有在df1的最后一行之前才会汇总。我如何将它们添加到最长文件的最后一行,这样就不会丢失任何数据?我认为groupby.sum by panda可能是一个选项,但我不知道如何使用它

要添加一个示例-现在我了解到:

文件1:

A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4
1,0,0
1,0,1
1,0,0
0,1,0
1,0,0
1,0,1
1,0,0
0,1,0
文件2:

1,1,0
1,1,1
0,1,0
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
档案…:

输出:

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

您可以使用pandas中的面板,一个
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

为了寻找完全相同的东西,我发现面板现在已经不推荐使用,所以我在这里发布了新闻:

class pandas.Panel(data=None, items=None, major_axis=None, minor_axis=None, copy=False, dtype=None)
自版本0.20.0以来已弃用:建议通过to_frame()方法或使用xarray包在数据帧上使用>多索引来表示三维数据。>Pandas提供了一个to_xarray()方法来自动化此转换

将宽格式转换为长(堆叠)格式,作为数据帧,其列>面板的项,其索引是由面板的主索引和>次索引组成的多索引

我建议使用 pandas.DataFrame.sum

DataFrame.sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)
参数:
轴:{索引(0),列(1)} 要应用于的功能的轴


我们可以用与B.M.答案相同的方法使用它。我的问题是,我的文件有不同的行数,并且只汇总到df1的最后一行。你会怎么处理剩余的数字?我已经添加了一个例子来更好地解释我的意思。