Python / Pandas:按顺序填充 NaN - 线性插值 --> ffill --> bfill

Posted

技术标签:

【中文标题】Python / Pandas:按顺序填充 NaN - 线性插值 --> ffill --> bfill【英文标题】:Python / Pandas: Fill NaN with order - linear interpolation --> ffill --> bfill 【发布时间】:2021-03-09 03:43:04 【问题描述】:

我有一个df

     company  year      revenues
0  company 1  2019   1,425,000,000
1  company 1  2018   1,576,000,000
2  company 1  2017   1,615,000,000
3  company 1  2016   1,498,000,000
4  company 1  2015   1,569,000,000
5  company 2  2019             nan
6  company 2  2018   1,061,757,075
7  company 2  2017             nan
8  company 2  2016     573,414,893
9  company 2  2015     599,402,347

我想fillnan 的值,有一个订单。我想先线性插值,然后是前向填充,然后是后向填充。我目前有:

f_2_impute = [x for x in cl_data.columns if cl_data[x].dtypes != 'O' and 'total' not in x and 'year' not in x]

def ffbf(x):
    return x.ffill().bfill()

group_with = ['company']

for x in cl_data[f_2_impute]:
    cl_data[x] = cl_data.groupby(group_with)[x].apply(lambda fill_it: ffbf(fill_it))

执行ffill()bfill()。理想情况下,我想要一个函数,它首先尝试线性插入缺失值,然后尝试向前填充它们,然后向后填充它们。

有什么快速的方法吗?提前谢谢你。

【问题讨论】:

pandas.pydata.org/pandas-docs/stable/reference/api/… 【参考方案1】:

如果有,,我相信您需要先将列转换为浮点数:

df = pd.read_csv(file, thousands=',')

或者:

df['revenues'] = df['revenues'].replace(',','', regex=True).astype(float)

然后添加DataFrame.interpolate:

def ffbf(x):
    return x.interpolate().ffill().bfill()

【讨论】:

如果我设置了这个选项,pd.options.display.float_format = ':,.2f'.format,我认为我仍然不需要替换','对吗? @sophods - 如果它只是显示然后不是;)

以上是关于Python / Pandas:按顺序填充 NaN - 线性插值 --> ffill --> bfill的主要内容,如果未能解决你的问题,请参考以下文章

用零个 python pandas 填充 nan

Python Pandas - 用前一列的值向前填充整行

熊猫:在每组中按平均值填充缺失值

熊猫:在每组中按平均值填充缺失值

如何在 Pandas Python 中为一组主键分组填充 NA 值

如何使用连接来填充列的缺失值 - Python Pandas?