【发布时间】:2021-10-01 16:36:53
【问题描述】:
我必须替换像这样组织的数据集的 NaN 值
细分:安达曼和尼科巴群岛
年份:1901
一月:49.20
二月:87.10
三月:南
四月:19.10
五月:89.99
(实际上一年中的所有月份都显示在列中)
我必须用前一年 (1900) 和下一年 (1902) 的平均值替换 NaN 值,如果可能的话,还可以添加同年下个月的值 (APR 1901 ) 取这三个值的平均值。
import pandas as pd import numpy as np import statistics # Loop through rows of dataframe by index i.e. from 0 to number of rows for i in range(0, df.shape[0]): for j in range(1, df.shape[1]): #iterate over columns if pd.isna(df.iloc[i,j]): adjacentYearBefore = df.iloc[i-1,j].mean() adjacentYearAfter= df.iloc[i+1,j].mean() #avgYear = ((np.float64(adjacentYearBefore)) + (np.float64(adjacentYearAfter))) / 2.0 avgYear = (adjacentYearBefore + adjacentYearAfter).mean() print(avgYear) df.iloc[i,j] = df.iloc[i,j].fillna(avgYear)
但是把这个还给我
AttributeError Traceback (most recent call last)
<ipython-input-29-32c064fa8ca4> in <module>()
11 avgYear = (adjacentYearBefore + adjacentYearAfter).mean()
12 print(avgYear)
---> 13 df.iloc[i,j] = df.iloc[i,j].fillna(avgYear)
14 #df.iloc[i,j].ffill(inplace=True)
15 #
AttributeError: 'numpy.float64' object has no attribute 'fillna'
当然,我已经阅读了关于堆栈溢出的类似问题,但我仍然无法解决我的问题。
更新:
df.head(10)
【问题讨论】:
-
拜托,您能否使用
df.head(10)的输出更新您的帖子以了解数据框。 -
查看
pandas.Series.interpolate,它完全符合您的要求pandas.pydata.org/pandas-docs/stable/reference/api/…。 -
在我的情况下插值是线性的还是多项式的?
标签: python pandas dataframe numpy google-colaboratory