【问题标题】:Cannot convert float NaN to integer after dropping NaN删除 NaN 后无法将浮点 NaN 转换为整数
【发布时间】:2021-11-16 04:18:13
【问题描述】:

我一直在尝试使用脚本来读取数据并从下表 (AlcData) 中计算每年的平均使用频率:

Frequency
Never
1-2 times per year
3-4 times per month
Every day
1-2 times per week

到这张桌子:

Frequency
0
1.5
42
365
0
78
0

如您所见,第一个表中有一些缺失值被读取为“NaN”,我想将其转换为值 0。我已经尝试了数十种在线解决方案来尝试替换(或者不太理想的是删除) NaN 值,但我不断收到错误消息:“无法将浮点 NaN 转换为整数”。有谁知道我的错误可能在下面的代码中?

import pandas as pd 

AlcData['Frequency'].replace(str('Every day'), str('365 days per year'))
AlcData['Frequency'].replace(str('Never'), str('0 days per year'))
AlcData["Frequency"].fillna(0)

AlcData['Frequency'].str.split().str[-1].map({'week': 52, 'month': 12, 'year': 1}).mul(AlcData['Frequency'].str.extract(r'(\d+)\D*(\d+)?').ffill(axis=1).astype(int).mean(axis=1))

任何提示都将不胜感激!

【问题讨论】:

    标签: python regex pandas replace nan


    【解决方案1】:
    df['Frequency'].replace(str('Every day'), str('365 days per year'),inplace=True)
    df['Frequency'].replace(str('Never'), str('0 days per year'), inplace=True)
    
    df['Frequency'] = df['Frequency'].str.split().str[-1].map({'week': 52, 'month': 12, 'year': 1}).mul(df['Frequency']
                                                                                      .str.extract(r'(\d+)\D*(\d+)?').ffill(axis=1).astype(float).mean(axis=1))
    df["Frequency"].replace(np.nan, 0, inplace=True)
    

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2021-11-12
      相关资源
      最近更新 更多