【问题标题】:How to sum the column value seperated with semicolon in python如何在python中对用分号分隔的列值求和
【发布时间】:2019-08-23 14:33:53
【问题描述】:

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

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'

【问题讨论】:

  • 您能否粘贴您的数据的 sn-p 和更清晰的预期输出(您可以将它们粘贴到 HTML sn-ps 中)?

标签: python-3.x pandas


【解决方案1】:

Series.str.splitexpand=True 一起用于DataFrame,每行转换为浮点数和sum - pandas 默认排除缺失值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2023-03-07
    • 2019-08-19
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多