如何解决DataFrame每行中的值总和
我有一个csv文件,其中包含100行且只有一列。每行都有很多值,我想找到这些值的总和,但是每一行都被视为一个大整数。
如何将大型数据集(定界符?)拆分为单独的列,或者对每一行中的每个值求和而不必拆分呢?
例如我的文件现在的样子
A 1100100101000112012110011
B 0000010100011000002000111
C 0010100000011000000101110
D 1100000110001011001001100
E 0000210000000000000010010
我想要的样子:
SUM
A 1100100101000112012110011 16
B 0000010100011000002000111 9
C 0010100000011000000101110 8
D 1100000110001011001001100 10
E 0000210000000000000010010 5
由于每一行看起来像一个大数字,我目前无法获得总和。
解决方法
.apply
内的代码说明
-
vals
列中的每个值都是str
类型,而不是数字。 - 使用
list()
会将字符串分成一个列表
ex = list('1100100101000112012110011')
# print(ex)
[out]:
['1','1','0','2','1']
- 每个值都必须用
map
转换为int
,然后才能对列表求和。
print(list(map(int,ex)))
[out]:
[1,1,2,1]
读取csv并转换列的代码
- 要读取给定的文件,请使用
pandas.read_csv
并使用sep='\\s+'
指定分隔符。 - 使用
pandas.DataFrame.apply
转换列
import pandas as pd
# given the sample csv
df = pd.read_csv('test.csv',sep='\\s+',header=None)
df.rename(columns={0: 'ID',1: 'vals'},inplace=True)
# transform the column with apply
df['SUM'] = df.vals.apply(lambda x: sum(map(int,list(x))))
# display(df)
ID vals SUM
0 A 1100100101000112012110011 16
1 B 0000010100011000002000111 9
2 C 0010100000011000000101110 8
3 D 1100000110001011001001100 10
4 E 0000210000000000000010010 5
# save the df
df.to_csv('test.csv',index=False)
,
使用列表理解的替代解决方案:
df['SUM'] = df.vals.map(lambda x: sum([int(i) for i in x]))
结果df
:
id vals SUM
0 A 1100100101000112012110011 16
1 B 0000010100011000002000111 9
2 C 0010100000011000000101110 8
3 D 1100000110001011001001100 10
4 E 0000210000000000000010010 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。