2016-11-21 7 views
1

何百万回も質問されていることはよく知っていますが、実際にはこのような答えが見つからないデータクリーニングで日付を非公開のm/d/y形式でpython pandasのdatetimeに変換する

私はパディングなしのアメリカンレイアウトの文字列として日付の列を持っているので、2009年2月19日は2/19/09です。

私はPythonのパンダにdatetime型に変換しようとしているここで例のデータです:

member state country   zip   joined . pet 
16081 NY  UNITED STATES 11215  9/4/09 . parrot 
21186 NY  UNITED STATES 5325  8/9/11 . crunchyfrog 
34999 NY  UNITED STATES 11218  11/4/16 lumberjack 
34999 NY  FOOBAR STATES NaN   11/4/16 blind bat 
5033 NY  UNITED STATES 11238-1630 11/7/16 norwegianblue 
35079 NY  FOOBAR STATES SW4 9JX  11/13/16 . spanishinq 
35084 NY  UNITED STATES 11217-2181 11/14/16 . spam 

私の最新の試みだった戻った

for x in df['joined']: 
    x = dt.strptime(x, '%m/%d/%Y') 

「時刻データ「2/16/09 'は'%m /%d /%Y 'のフォーマットに一致しません "

答えて

3

試してみてくださいto_datetime

df.joined = pd.to_datetime(df.joined) 
print (df) 
    member state  country   zip  joined   pet 
0 16081 NY UNITED STATES  11215 2009-09-04   parrot 
1 21186 NY UNITED STATES  5325 2011-08-09 crunchyfrog 
2 34999 NY UNITED STATES  11218 2016-11-04  lumberjack 
3 34999 NY FOOBAR STATES   NaN 2016-11-04  blind bat 
4 5033 NY UNITED STATES 11238-1630 2016-11-07 norwegianblue 
5 35079 NY FOOBAR STATES  SW4 9JX 2016-11-13  panishinq 
6 35084 NY UNITED STATES 11217-2181 2016-11-14   spam 

必要な場合にもformatを指定することができます。

df.joined = pd.to_datetime(df.joined, format='%m/%d/%y') 
print (df) 
    member state  country   zip  joined   pet 
0 16081 NY UNITED STATES  11215 2009-09-04   parrot 
1 21186 NY UNITED STATES  5325 2011-08-09 crunchyfrog 
2 34999 NY UNITED STATES  11218 2016-11-04  lumberjack 
3 34999 NY FOOBAR STATES   NaN 2016-11-04  blind bat 
4 5033 NY UNITED STATES 11238-1630 2016-11-07 norwegianblue 
5 35079 NY FOOBAR STATES  SW4 9JX 2016-11-13  panishinq 
6 35084 NY UNITED STATES 11217-2181 2016-11-14   spam 
+0

(そのI:

dt.strptime(x, '%m/%d/%y') 

列全体が適用機能を使用することですし、これを適用するための最も簡単な方法:使用してみてください今について尋ねるにはあまりにも愚かな感じ)。ありがとう! – ajbentley

+0

変換されたdatetimeをdataframeに割り当てる必要がありますか? – jezrael

+0

これは私にこれらのリストを与えます:numpy.datetime64( '2002-07-17T00:00:00.000000000')私は今私が始めたものに近いように見えるが、日付として認識される形式に変換すると思います。 – ajbentley

1

"時間データ '2/16/09は' フォーマットは '%M /%D /%Y' と一致しません"

あなたが%Y代わりの%yを使用しているので:

%y - Year without century as a zero-padded decimal number. 
%Y - Year with century as a decimal number. 
+0

私は首都が私に出力の4桁を与えると思った(私は今、尋ねるにはあまりにも愚かな気がする)。ありがとう! – ajbentley

+0

残念ながら、lowercaseに変更すると文字列が残ってしまいました。 – ajbentley

2

エラーは、%Yがyyではなくyyyy表現であることが原因です。私は資本を持つことは私の出力の4桁を与えるだろうと思った

df.joined = df.joined.apply(lambda x: dt.strptime(x, '%m/%d/%y')) 
+0

私は首都が私に出力の4桁を与えると思った(私は今、尋ねるにはあまりにも愚かだと感じている)。ありがとう! – ajbentley

+0

これは実際にはまだこの後の文字列です。 – ajbentley

+0

これは、jezrealが既に私が仮定している実用的な答えを与えているが、トリックを行う必要があります:) – Skirrebattie

関連する問題