首页 > 解决方案 > Pandas 在枢轴操作后用零替换 NaN 值

问题描述

我有一个这样的数据框:

Year    Month     Day      Rain (mm)

2021      1        1          15

2021      1        2          NaN

2021      1        3          12

依此类推(有多年)。我已经使用pivot_table函数将 DataFrame 转换为:

Year         2021     2020    2019    2018   2017
Month  Day
1       1     15
        2     NaN
        3     12

我用了:

df = df.pivot_table(index=['Month', 'Day'], columns='Year',
                 values='Rain (mm)', aggfunc='first')

现在我想用每列中的零替换所有NaN值和可能的-1值(我的意思是几年),但我无法这样做。我努力了:

df = df.fillna(0)

并且:

df.loc[df['Rain (mm)'] == NaN, 'Rain (mm)'] = 0

但两者都不起作用,没有错误消息/异常,数据框保持不变。我做错了什么?任何建议都受到高度赞赏。

标签: pythonpandas

解决方案


我认为问题是NaN字符串,所以不能替换它们,所以首先尝试将值转换为数字:

df['Rain (mm)'] = pd.to_numeric(df['Rain (mm)'], errors='coerce')

df = df.pivot_table(index=['Month', 'Day'], columns='Year',
             values='Rain (mm)', aggfunc='first').fillna(0)

推荐阅读