【发布时间】:2017-09-21 00:21:44
【问题描述】:
我有一个带有日期时间索引的数字和非数字值的数据框:
df = pd.DataFrame([
{'date': datetime(2017, 4, 24, 1), 'a':1, 'b':2, 'c': "hee"},
{'date': datetime(2017, 4, 24, 2), 'a':2, 'b':4, 'c': 'hoo'},
{'date': datetime(2017, 4, 24, 3), 'a':4, 'b':8, 'c': 'joo'},
{'date': datetime(2017, 4, 24, 4), 'a':8, 'b':16, 'c': 'jee'}
]).set_index('date')
我想:
- 线性插值数值;和
- 获取非数字值的最接近值。
最优雅的实现是什么?
策略 1
全部插值,然后fillna:
df = df.resample('20T').interpolate('linear')
df.fillna(method='nearest')
但是...nearest 方法没有实现。
策略 2
拆分数字列和非数字列
df2 = df.resample('20T')
df_a = df2._get_numeric_data().interpolate('linear')
df_b = df2[list(set(df.columns) - set(set(df_a.columns)))].interpolate('nearest')
给出错误:
TypeError:无法使用所有 NaN 进行插值。
更新
使用最近的方法进行插值,确实适用于布尔值和数值,但不适用于字符串,例如:
df.resample('20T').intepolate('nearest')
【问题讨论】:
标签: python-3.x pandas datetime