Python 数据帧中大小不均列的求和
我有csv文件,其内容如下: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结构不好 解决方案: 主要问题
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