私はpandas.to_datetime()
を使用して、日時のインデックスに文字列形式からpandas.DataFrame
のインデックスを変換しようとしています。pandas.to_datetime一貫性のない時間文字列の書式
インポートパンダ:
In [1]: import pandas as pd
In [2]: pd.__version__
Out[2]: '0.10.1'
例のデータフレームを作成します。インデックスで
ルック。日時に
In [5]: df.index
Out[5]: Index([26/12/2012, 10/01/2013], dtype=object)
変換インデックス:日付形式は日/月/年であることに注意してください
In [6]: pd.to_datetime(df.index)
Out[6]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-10-01 00:00:00]
Length: 2, Freq: None, Timezone: None
すでにこの段階では、各エントリの日付形式が異なってフォーマットされていることがわかります。最初はうまく、2番目は月と日が交換されています。
これは私が書きたいものですが、日付文字列の一貫性のないフォーマットを回避:
In [7]: df.set_index(pd.to_datetime(df.index))
Out[7]:
data
2012-12-26 1
2013-10-01 2
私は機能はとても26ヶ月が存在しない「知っている」、およびので、最初のエントリが正しいことを推測しますデフォルトの月/日/年形式は選択されません。
はこれを行うには、別の/より良い方法はありますか?フォーマットをto_datetime()
関数に渡すことはできますか?
ありがとうございます。
編集:私はpandas.to_datetimeせずに、これを行う方法を発見した
:
import datetime.datetime as dt
date_string_list = df.index.tolist()
datetime_list = [ dt.strptime(date_string_list[x], '%d/%m/%Y') for x in range(len(date_string_list)) ]
df.index=datetime_list
が、それは少し厄介です。あらゆる改善が歓迎されます。
おかげ@andyが。 'dayfirst'引数が機能します。しかし、私は 'format'を使うことはできません。 'TypeError:to_datetime()に予期しないキーワード引数 'format'があります。それは私が使っているパンダのバージョン(0.10.1)で利用できるはずですか? –
@ random.meああ申し訳ありません。そうではありません、私はdevで作業していたので(それは0.11になるでしょう)! –
ありがとうございましたこれは役に立ちました。私は、バージョン0.15に取り組んでいると私はそうformat'は明らかに役立っていない ''導入dayfirst = true'をパラメータにフィードしていない場合パンダはまだ混乱します。それ@Zhubarb – Rhubarb