Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧中大小不均列的求和_Python_Pandas_Group By_Sum - Fatal编程技术网

Python 数据帧中大小不均列的求和

Python 数据帧中大小不均列的求和,python,pandas,group-by,sum,Python,Pandas,Group By,Sum,我有csv文件,其内容如下: a b ca 12, 20, 45 ca 18, 27 ca 30, 32, 41, 49 ny 4, 12, 12, 37, 43 ny 33 ny 8, 10, 40, 44 如何将数据作为DataFrame读入python,并获得每行的平均值和总和 求和示例 a b ca 72 45 152 ny 108 33 102 这并不容易,因为不像前面指出的那样,csv结构不好 解决方案: 主要问题

我有csv文件,其内容如下:

a       b
ca  12, 20, 45
ca  18, 27
ca  30, 32, 41, 49
ny  4, 12, 12, 37, 43
ny  33
ny  8, 10, 40, 44
如何将数据作为DataFrame读入python,并获得每行的平均值和总和

求和示例

a    b
ca  72
    45
    152
ny  108
    33
    102

这并不容易,因为不像前面指出的那样,csv结构不好

解决方案:

主要问题是您不知道列的数量,为了避免
错误
,需要向中的参数
名称添加什么,所以您必须使用一些常量,如
N=20

CParserError:标记数据时出错。C错误:第4行中预期有4个字段,SAW5


更具活力的解决方案:

#get max count of space separators
data = []
with open('file.csv') as f:
    lines = f.readlines()
    for line in lines:
        data.append(len(line.split()))

#if necessary add 1
N = max(data)
print (N)
6

df = pd.read_csv('file.csv', sep="\s+",  skiprows = 1, names = range(N))
print (df)
    0    1    2    3    4     5
0  ca  12,  20,   45  NaN   NaN
1  ca  18,   27  NaN  NaN   NaN
2  ca  30,  32,  41,   49   NaN
3  ny   4,  12,  12,  37,  43.0
4  ny   33  NaN  NaN  NaN   NaN
5  ny   8,  10,  40,   44   NaN
设置

import pandas as pd
from pandas.compat import StringIO

txt = """a       b
ca  12, 20, 45
ca  18, 27
ca  30, 32, 41, 49
ny  4, 12, 12, 37, 43
ny  33
ny  8, 10, 40, 44"""
解决方案
使用分隔符
\s{2,}
读取文件,该分隔符指定两个或多个空格。这将分为
a
b
列。然后我们可以处理
b

df = pd.read_csv(StringIO(txt), sep='\s{2,}', engine='python', index_col=0)
df = df.b.str.split(',\s*', expand=True).astype(float) \
       .sum(1).astype(int).to_frame(name='b')

print(df)

      b
a      
ca   77
ca   45
ca  152
ny  108
ny   33
ny  102

a
b
列的分隔符是什么<代码>选项卡
?这不是一个结构良好的CSV文件。如果“ca”和“12”之间没有逗号,则它们在CSV文件中不是单独的值。另外,对于本质上不是表格的数据,使用pandas通常是没有意义的,而您的数据不是因为行的长度不同。
import pandas as pd
from pandas.compat import StringIO

txt = """a       b
ca  12, 20, 45
ca  18, 27
ca  30, 32, 41, 49
ny  4, 12, 12, 37, 43
ny  33
ny  8, 10, 40, 44"""
df = pd.read_csv(StringIO(txt), sep='\s{2,}', engine='python', index_col=0)
df = df.b.str.split(',\s*', expand=True).astype(float) \
       .sum(1).astype(int).to_frame(name='b')

print(df)

      b
a      
ca   77
ca   45
ca  152
ny  108
ny   33
ny  102