首页 > 解决方案 > 如何在python中对用分号分隔的列值求和

问题描述

我有一个数据框,其值如下:

df = pd.DataFrame({'Column4': ['NaN;NaN;1;4','4;8','nan']} )
print (df)
       Column4
0  NaN;NaN;1;4
1          4;8
2          nan

我尝试使用下面的代码来获得总和。

df['Sum'] = df['Column4'].apply(lambda x: sum(map(int, x.split(';'))))

我收到错误消息

ValueError:int() 的无效文字,基数为 10:'NaN'

标签: python-3.xpandas

解决方案


Series.str.splitexpand=Truefor一起使用DataFrame,转换为浮点数和sum每行 - 默认情况下,熊猫排除缺失值:

df['Sum'] = df['Column4'].str.split(';', expand=True).astype(float).sum(axis=1)
print (df)
       Column4   Sum
0  NaN;NaN;1;4   5.0
1          4;8  12.0
2          nan   0.0

你的解决方案应该改变:

f = lambda x: sum(int(y) for y in x.split(';') if not y in ('nan','NaN'))
df['Sum'] = df['Column4'].apply(f)

因为如果转换为浮点数,则使用另一个数字获取 NaN 的 mssing 值:

df['Sum'] = df['Column4'].apply(lambda x: sum(map(float, x.split(';'))))
print (df)
       Column4   Sum
0  NaN;NaN;1;4   NaN
1          4;8  12.0
2          nan   NaN

推荐阅读