2017-08-16 20 views
1

私は以下のフォーマットでパンダdf.indexを持っています。パンダインデックス日時の変更月と日

最初の項目が05Sep2017などであるので、それは、日/月/年の文字列です:

  1. 05/09/17#05Sep2017
  2. 07/09/17#07Sep2017
  3. ..

    df.index = pd.to_datetime(df.index) 
    
    01を適用する。
  4. 18/10/17#18Oct2017

上記に

、それを変換します。

  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

pandasのデフォルトのフォーマットは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' ) 'OR' df.index = pd.to_datetime(df.index).strftime( '%d-%b-%Y') ' – jezrael

関連する問題