2016-12-31 114 views
1

我有一个200列的数据框,其标题格式为datetime如何重新采样数据帧列?

2001-01-01 | 2001-02-01 | 2001-03-01 |等

我想重新取样列,所以我得到的季度手段

2001q01栏| 2001q02 |等

这里是我的重采样线:

df.resample('Q', axis=1) 

不幸的是,我得到一个错误,因为我的数据帧作为一个整数索引列,并按照我的理解,重采样正试图以索引执行过。

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index' 

我可以有一个没有索引的数据框吗?如果是这样,我该如何创建一个没有索引的数据框?如果没有,有没有办法在我的数据列上调用resample?

回答

2

由于错误说,你的列索引不DatetimeIndex,你需要将它们转换为DatetimeIndex首先:

df.columns = pd.to_datetime(df.columns) 

要展开评论,如果您的数据帧由7至206列与日期时间有关:

datetime_df = df.iloc[:, 7:207] 
datetime_df.columns = pd.to_datetime(datetime_df.columns) 
pd.concat([df.iloc[:,:7], datetime_df.resample("Q", axis=1).mean(), df.iloc[:,208:]], axis = 1) 
+0

我确实使用过to_datetime。以下是我的实际代码: –

+0

我看不到您的代码。你的'df.columns'看起来如何?它是多指标? – Psidom

+0

HousingAll.columns = [pd.to_datetime(x)if 7 <= i <= 206 else x for i,x in enumerate(HousingAll.columns,1)] –

2

您的列不是日期时间类型。您需要将它们转换为日期时间然后重新采样。

df.columns = pd.to_datetime(df.columns)