2017-08-16 159 views
1

我有一個熊貓df.index在下面的格式。熊貓指數日期時間轉換月和日

這是日/月/年的串,所以第一項是05Sep2017等:

  1. 17年5月9日#05Sep2017
  2. 17年7月9日#07Sep2017
  3. .. 。
  4. 18/10/17#18Oct2017

應用

df.index = pd.to_datetime(df.index) 

以上,將其轉換爲:

  1. 2017年5月9日#09May2017
  2. 2017年7月9日#09Jul2017
  3. ...
  4. 2017年10月18日#18Oct2017

似乎正在發生的事情是,第一個條目正在切換日和月。而最後一次輸入,如果日期大於12,則會正確轉換。

我試圖通過索引轉換成柱並施加到一個月天切換:

df['date'] = df.index 
df['date'].apply(lambda x: dt.datetime.strftime(x, '%Y-%d-%m')) 

以及:

df['date'].apply(lambda x: dt.datetime.strftime(x, '%Y-%m-%d')) 

但無濟於事。 如何將索引轉換爲datetime,其中所有條目均爲日/月/年?

回答

0

熊貓的默認格式爲date s YY-MM-DD

df = df.set_index('date_col') 
df.index = pd.to_datetime(df.index) 
print (df) 
      val 
2017-05-09 4 
2017-07-09 8 
2017-10-18 2 

print (df.index) 
DatetimeIndex(['2017-05-09', '2017-07-09', '2017-10-18'], dtype='datetime64[ns]', freq=None) 

你需要strftime,但失去了日期時間,因爲得到的字符串:

df.index = pd.to_datetime(df.index).strftime('%Y-%d-%m') 
print (df.index) 
Index(['2017-09-05', '2017-09-07', '2017-18-10'], dtype='object') 

df.index = pd.to_datetime(df.index).strftime('%d-%b-%Y') 
print (df) 
      val 
09-May-2017 4 
09-Jul-2017 8 
18-Oct-2017 2 
+0

以上收益率: '索引' 對象有沒有屬性 '的strftime'。 –

+0

也許需要首先'df = df.set_index('date_col')' – jezrael

+0

最後一行是另一種選擇,所以使用'df.index = pd.to_datetime(df.index).strftime('%Y-%d-%m' )'或'df.index = pd.to_datetime(df.index).strftime('%d-%b-%Y')' – jezrael