2017-01-16 25 views
3

我有一個數據框,其中列的名稱是字符串形式的日期(年 - 月)。我怎樣才能以日期時間格式轉換這些名稱? 我試着這樣做:將數據幀的列名從字符串格式更改爲datetime

new_cols = pd.to_datetime(df.columns) 
df = df[new_cols] 

,但我得到的錯誤:

KeyError: "DatetimeIndex(
['2000-01-01', '2000-02-01', 
'2000-03-01', '2000-04-01', 
'2000-05-01', '2000-06-01', 
'2000-07-01', '2000-08-01',    
'2000-09-01', '2000-10-01', 
'2015-11-01', '2015-12-01', 
'2016-01-01', '2016-02-01', 
'2016-03-01', '2016-04-01', 
'2016-05-01', '2016-06-01', 
'2016-07-01', '2016-08-01'], 
dtype='datetime64[ns]', length=200, freq=None) not in index" 

謝謝!

回答

7

如果選擇loc列值沒有改變,那麼得到KeyError

所以你需要分配輸出到columns

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

樣品:

cols = ['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'] 
vals = np.arange(5) 
df = pd.DataFrame(columns = cols, data=[vals]) 
print (df) 
    2000-01-01 2000-02-01 2000-03-01 2000-04-01 2000-05-01 
0   0   1   2   3   4 

print (df.columns) 
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object') 

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

print (df.columns) 
DatetimeIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', 
       '2000-05-01'], 
       dtype='datetime64[ns]', freq=None) 

也可以轉換到週期:

print (df.columns) 
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object') 

df.columns = pd.to_datetime(df.columns).to_period('M') 

print (df.columns) 
PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05'], 
      dtype='period[M]', freq='M') 
1

進行擴展以jezrael的回答,原始代碼將試圖通過存儲在new_cols和s中的數組來分割df數組將結果撕成df - 但由於這些值在df中不存在,但它返回一個錯誤,表示無法找到要切分的索引。

因此,您需要聲明您正在更改列的名稱,如jezrael的答案。

相關問題