我正在尝试插入时间序列数据,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
Run Code Online (Sandbox Code Playgroud)
我尝试: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
Run Code Online (Sandbox Code Playgroud)
ALo*_*llz 21
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()
Run Code Online (Sandbox Code Playgroud)
ValueError:无效的填充方法。期待填充 (ffill) 或回填 (bfill)。得到线性
在这种情况下,不需要插入该列,因此只需插入您需要的列。我们仍然想要DataFrame.interpolate这样选择[[ ]](Series.interpolate导致一些奇怪的重塑)
df['data'] = df.groupby(['lat', 'lon']).apply(lambda x: x[['data']].interpolate())
Run Code Online (Sandbox Code Playgroud)