首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用熊猫的多个csv文件的和数据

使用熊猫的多个csv文件的和数据
EN

Stack Overflow用户
提问于 2016-01-15 16:41:40
回答 2查看 2K关注 0票数 2

我有许多csv文件,它们的列数(不同的行数)在以下模式中是相同的:

档案1:

代码语言:javascript
复制
A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4

档案2:

代码语言:javascript
复制
*A1*,*B1*,*C1*
*A2*,*B2*,*C2*
*A3*,*B3*,*C3*

档案..。

输出:

代码语言:javascript
复制
A1+*A1*+...,B1+*B1*+...,C1+*C1*+...
A2+*A2*+...,B2+*B2*+...,C2+*C2*+...
A3+*A3*+...,B3+*B3*+...,C3+*C3*+...
A4+...     ,B4+...     ,C4+...

例如:

档案1:

代码语言:javascript
复制
1,0,0
1,0,1
1,0,0
0,1,0

档案2:

代码语言:javascript
复制
1,1,0
1,1,1
0,1,0

输出:

代码语言:javascript
复制
2,1,0
2,1,2
1,1,0
0,1,0

我正在尝试使用python.pandas,并想出这样的方法来创建读取变量:

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

然后对各栏进行求和:

代码语言:javascript
复制
for residue in residues:
       for number in range(14254,14255):
               df=dic['df_14253'][residue]
               df+=dic['df_'+str(number)][residue]

残数是字符串的列表,这些字符串是列名。

我的问题是,我的文件有不同的行数,并且只被求和到df1的最后一行。我如何将它们加到最长文件的最后一行-这样就不会丢失数据了?我认为熊猫的groupby.sum是一种选择,但我不知道如何使用它。

为了增加一个例子--现在我明白了:

档案1:

代码语言:javascript
复制
1,0,0
1,0,1
1,0,0
0,1,0

档案2:

代码语言:javascript
复制
1,1,0
1,1,1
0,1,0

档案3:

代码语言:javascript
复制
1,0,0
0,0,1
1,0,0
1,0,0
1,0,0
1,0,1

档案.:

输出:

代码语言:javascript
复制
3,1,0
2,1,3
2,1,0
1,1,0
1,0,0
1,0,1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-15 17:56:33

您可以在熊猫(一个3D对象)数据集中使用Panel:

代码语言:javascript
复制
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是一个数据字典。面板自动完成缺值的楠和做好的总和。例如:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-02-23 09:24:44

为了寻找同样的东西,我发现Panel现在不受欢迎了,所以我在这里发布了这样的消息:

代码语言:javascript
复制
class pandas.Panel(data=None, items=None, major_axis=None, minor_axis=None, copy=False, dtype=None)

自0.20.0版以来,推荐的表示三维数据的方法是使用DataFrame上的>MultiIndex (通过to_frame()方法)或使用xarray包。>Pandas提供了一个to_xarray()方法来实现这种转换的自动化。

代码语言:javascript
复制
to_frame(filter_observations=True)

将宽格式转换为长(堆叠)格式为DataFrame,其列为>面板的项,其索引是由面板的主要和>次要部分组成的MultiIndex

我建议使用pandas.DataFrame.sum

代码语言:javascript
复制
DataFrame.sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)

参数: 轴:{index (0),列(1)}要应用的函数的轴。

你可以用与B.M.答案相同的方式使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34815823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档