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并转换列的代码

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...