首页 > 解决方案 > Pandas 系列仅将 NaN 填充到一定限制

问题描述

我有一个数据集“artwork.csv” https://gitlab.com/IEA_ML_LAB/test/-/blob/80713d4823c4778d11468bcaf4a5223f6a160c88/artwork.csv

“年份”列包括 int64 和 NaN。

在此处输入图像描述

我想用文本“无日期”替换前 100 个 NaN 值。我尝试了不同的方法,但没有成功。

'year' 列有 1279 个 NaN 值。我想将 1279 中的前 100 个设置为“无日期”

在此处输入图像描述

前 100 个 NaN 值:

在此处输入图像描述

我尝试以下命令。它们不会产生任何错误,但它们也不会修改系列:

df.loc[df.year.isnull(), 'year'].iloc[:100] = 'no date'
(df.loc[df.year.isnull(), 'year'].iloc[:100]).replace('NaN', 'no date', inplace=True)
(df.loc[df.year.isnull(), 'year'].iloc[:100]).transform(lambda x: 'no date')

提前致谢。

标签: pythonpandasdataframeseries

解决方案


fillna有一个limit参数可以设置为 100:

df['year'] = df['year'].fillna('no date', limit=100)

无需iloc事先调用,因为这会生成额外的数据副本。

虽然要注意混合字符串和浮点数可能不是最好的选择,因为它在处理数据时会严重影响性能。


推荐阅读