Pandas列をDateTimeに変換


241

文字列形式としてインポートされたpandas DataFrameに1つのフィールドがあります。日時変数でなければなりません。それを日時列に変換し、日付に基づいてフィルタリングするにはどうすればよいですか。

例:

  • データフレーム名:raw_data
  • 列名:Mycol
  • 列の値の形式:'05SEP2014:00:00:00.000'

回答:


430

to_datetime関数を使用して、データに一致する形式を指定します

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

70
注:format引数は必須ではありません。to_datetimeスマートです。データを照合せずに試してください。
samthebrand 2017

6
回避するためにはSettingWithCopyWarning、@のダース・behfans使用をstackoverflow.com/a/42773096/4487805
アルバロ・Loza

3
日付ではなく時間だけが必要な場合はどうなりますか?
FaCoffee 2017年

5
それほど賢くない。列の一部が明確にdayfirst = True形式である場合でも、同じ列の他の列についてはデフォルトでdayfirst = Falseになります。したがって、明示的なフォーマット指定または少なくともdayfirstパラメータを使用する方が安全です。
CPBL

10
書式文字列を省略すると、多くのレコードでこの操作が遅くなる可能性があります。この回答はその理由を説明しています。以下のように見えますがinfer_datetime_format=True、あなたがフォーマット文字列が含まれていない場合も(パンダのドキュメントによれば)〜5-10xにスピードをアップパース増加する可能性があります。
atwalsh

52

DataFrameメソッド.apply()を使用して、Mycol の値を操作できます。

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
                    Mycol
0  05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
                                    dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
       Mycol
0 2014-09-05

1
ありがとう!これはより広く適用できるのでいいですが、他の答えはより直接的でした。私はどちらが好きかを決めるのに苦労しました:)
Chris

2
pandas.tslib.Timestampオブジェクトとは対照的に、datetimeオブジェクトを生成するので、私はこの答えがより好きです
wesanyer

25

変換する列が複数ある場合は、次の操作を実行できます。

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)

15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

は機能しますが、DataFrameからのスライスのコピーに値が設定されようとしているというPythonの警告が表示されます。.loc[row_indexer,col_indexer] = value代わりに使用してみてください

これは、いくつかの連鎖インデックスによるものだと思います。


2
数回試してみましたが、これでも機能します:raw_data.loc [:、 'Mycol'] = pd.to_datetime(raw_data ['Mycol']、format = '%d%b%Y:%H:%M:%S 。%f ')
pinegulf

9

pandas to_datetime関数を使用して、列をDateTimeとして解析します。また、を使用infer_datetime_format=Trueすると、フォーマットが自動的に検出され、前述の列がDateTimeに変換されます。

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.