首页 > 解决方案 > Pandas 插值:{ValueError}无效的填充方法。期待填充 (ffill) 或回填 (bfill)。得到线性

问题描述

我正在尝试插入时间序列数据,df看起来像:

         id      data        lat      notes    analysis_date
0  17358709       NaN  26.125979      None     2019-09-20 12:00:00+00:00
1  17358709       NaN  26.125979      None     2019-09-20 12:00:00+00:00
2  17352742 -2.331365  26.125979      None     2019-09-20 12:00:00+00:00
3  17358709 -4.424366  26.125979      None     2019-09-20 12:00:00+00:00

我尝试:df.groupby(['lat', 'lon']).apply(lambda group: group.interpolate(method='linear')),它抛出{ValueError}Invalid fill method. Expecting pad (ffill) or backfill (bfill). Got linear 我怀疑问题在于我有None价值观,我不想插入这些价值观。解决办法是什么?

df.dtypes给我:

id                                                                int64
data                                                            float64
lat                                                             float64
notes                                                            object
analysis_date         datetime64[ns, psycopg2.tz.FixedOffsetTimezone...
dtype: object

标签: pandasdataframe

解决方案


DataFrame.interpolate时区感知 datetime64ns 列存在问题,这导致了相当神秘的错误消息。例如

import pandas as pd

df = pd.DataFrame({'time': pd.to_datetime(['2010', '2011', 'foo', '2012', '2013'], 
                                          errors='coerce')})
df['time'] = df.time.dt.tz_localize('UTC').dt.tz_convert('Asia/Kolkata')
df.interpolate()

ValueError:无效的填充方法。期待填充 (ffill) 或回填 (bfill)。得到线性


在这种情况下,不需要插入该列,因此只需插入您需要的列。我们仍然想要DataFrame.interpolate这样选择[[ ]]Series.interpolate导致一些奇怪的重塑)

df['data'] = df.groupby(['lat', 'lon']).apply(lambda x: x[['data']].interpolate())

推荐阅读