重采样pandas数据框会删除列。

13
                    Val         ts  year  doy     interpolat  region_id
2000-02-18          NaN  950832000  2000   49           NaN      19987
2000-03-05          NaN  952214400  2000   65           NaN      19987
2000-03-21          NaN  953596800  2000   81           NaN      19987
2000-04-06  0.402539365  954979200  2000   97           NaN      19987
2000-04-22   0.54021746  956361600  2000  113           NaN      19987

上述数据框具有日期时间索引。我将其重新采样如下:

df = df.resample('D')

然而,这种重新采样导致了以下数据框:

                    ts  year  doy    interpolat  region_id
2000-01-01  1199180160  2008    1             1      19990
2000-01-02         NaN   NaN  NaN           NaN        NaN
2000-01-03         NaN   NaN  NaN           NaN        NaN
2000-01-04         NaN   NaN  NaN           NaN        NaN
2000-01-05         NaN   NaN  NaN           NaN        NaN
为什么“Val”列消失了?所有其他列似乎也错乱了。请查看线性插值缺失的Pandas数据框行以了解数据框的来源。
--编辑 根据@unutbu的问题:
df.reset_index().to_dict('list')

{'index': [Timestamp('2000-02-18 00:00:00'), Timestamp('2000-03-05 00:00:00'), Timestamp('2000-03-21 00:00:00'), ... '0.670709965', '0.631584375', '0.562112815', '0.50740686', '0.4447712', '0.47880806', nan, nan]}

--编辑:上述数据框的完整csv文件在此处:

https://www.dropbox.com/s/dp76hk6yfs6c1og/test.csv?dl=0


2
重采样后的数据框中有2008年1月的数值,而原始数据框仅从2000年2月开始。 - Stefan
没错,不确定重采样后的数据框怎么会有年份=2008。原始数据框从2000年2月开始。 - user308827
在重新采样之前,它是正常的。 - user308827
请发布 df.reset_index().to_dict('list') 以便我们能够重现问题。 - unutbu
因此,Val列具有对象类型。如果我将其强制转换为浮点数,问题就会消失。@joris,如果您能够将查询编写为答案,我将接受。 - user308827
显示剩余4条评论
1个回答

19

Val列由于某种原因可能没有数字数据类型,所有非数字(例如object数据类型)列都在resample中被删除。

要检查,请查看df.info()
要将其转换为数字列,您可以使用astype(float)convert_objects(从v0.17开始使用pd.to_numeric)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接