2017-04-05 10 views
0

私は簡単な質問があります。これは以前に何度も尋ねられた質問のようです(例えば、herehere、およびhereを参照)。それにもかかわらず、私はそれを解決することはできません。文字列を日時に変換する

私はcsvファイルから読み込んだパンダのデータフレームを取得しました。これにはstart-planという名前の列が含まれ、文字列は'05-04-2017'(4月5日、2017)の形式です。私が理解する限り、それは%d-%m-%Yという形式のヨーロッパ日時計です。ここ は、私が何をすべきかです:

df = pd.read_csv('activities.csv') 

これはどのように見えるかをデータフレームのヘッドである:私はこのようなcolumsを変換しよう

print(df.head()) 

     start-plan start-actual end-plan end-actual user late 
0 12-01-2017 16-01-2017 11-02-2017 10-02-2017  1  0 
1 11-05-2017 15-05-2017 10-06-2017 18-06-2017  2  1 
2 20-08-2017 20-08-2017 19-09-2017 05-10-2017  3  1 
3 10-12-2017 10-12-2017 09-01-2018 08-01-2018  1  0 
4 25-04-2017 25-04-2017 25-05-2017 26-05-2017  4  0 

pd.to_datetime(pd.Series('start-plan'), format='%d-%m-%y') 

私はエラーを知らせるを取得しますそのtime data 'start-plan' does not match format '%d-%M-%Y' (match)

私は間違っていますか?さらに、私は変換したい同じフォーマットのいくつかのカラムを持っています。一度にすべてを変換する可能性はありますか?

答えて

4

あなたはpd.Series

'start-plan'の試しに作っている:

pd.to_datetime(df['start-plan'], format='%d-%m-%y') 

また、オプションdayfirst=Trueを使用することができます。

あなたは、私が `DFを試してみました[ '開始の計画を'] = pd.to_datetime([ 'スタートプランを'] DF)`だけでなく、この

cols = ['start-plan', 'start-actual', 'end-plan', 'end-actual'] 
df = df[cols].apply(
    pd.to_datetime, dayfirst=True 
).join(df.drop(cols, 1)) 

print(df) 

    start-plan start-actual end-plan end-actual user late 
0 2017-01-12 2017-01-16 2017-02-11 2017-02-10  1  0 
1 2017-05-11 2017-05-15 2017-06-10 2017-06-18  2  1 
2 2017-08-20 2017-08-20 2017-09-19 2017-10-05  3  1 
3 2017-12-10 2017-12-10 2018-01-09 2018-01-08  1  0 
4 2017-04-25 2017-04-25 2017-05-25 2017-05-26  4  0 
+0

のように一度にそれを得ることができます。どちらもうまくいくようです!ありがとうございました! – Rachel

+1

@Rachelこれは 'pd.to_datetime'が推論できたためです。それがあいまいであった場合、あなたは特定の方が良いです。 – piRSquared

+1

@レイチェル、私はパンダが推測すると思っても、df.loc [1、 'start-plan']を試してみました。それは11の代わりに5を返します。だから、piRsquared答えは行く道です – Vaishali

関連する問題