熊猫插值:{ValueError}无效的填充方法。期待垫(填充)或回填(填充)。得到线性

时间:2019-11-13 18:46:08

标签: pandas dataframe

我正在尝试对时间序列数据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

1 个答案:

答案 0 :(得分:1)

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:无效的填充方法。期待垫(填充)或回填   (填充)。线性


在这种情况下,不需要对该列进行插值,因此只需对所需的列进行插值。我们仍然希望DataFrame.interpolate,所以请选择[[ ]]Series.interpolate会导致一些奇怪的重塑)

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