2016-09-27 2 views
3

パンダの列df['day']をdatetime型に解析しようとしています。値は現在、文字列として書かれています(例:2016-9-1)。これは、年 - 月 - 日に対応します。Parse Pandasパッセージをダッシュ​​付きの文字列から現在の列

私は、このページから書式設定を次のようだ: http://strftime.org/

私が最初に

pd.to_datetime(df['day'], format="%Y-%m-%d") 

を使用しようとしましたが、私はこの問題を考え出しエラー

ValueError: time data 'day' does match format specified 

を得たが、その日でした月はゼロではなく、パッドが付けられているので、次のように変更されました。

pd.to_datetime(df['day'], format="%Y-%-m-%-d") 

私は%-m%-dを使用しています。どちらも0でない詰め物(10進数)に対応しているからです。

別のエラーを取得:

ValueError: '-' is a bad directive in format '%Y-%-m-%-d' 

私はhttp://strftime.org/からの書式規則を次のようしてはいけません、私は何かが足りないのですか?

答えて

3

あなたは、パラメータformat-を削除する必要があります。

df = pd.DataFrame({'day':['2016-9-1']}) 
print (df) 
     day 
0 2016-9-1 

print (pd.to_datetime(df['day'], format="%Y-%m-%d")) 
0 2016-09-01 
Name: day, dtype: datetime64[ns] 

EDIT:

df = pd.DataFrame({'day':['2016-9-1', '2016-12-0']}) 
print (df) 
     day 
0 2016-9-1 
1 2016-12-0 

#check problematic values 
print (df[pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce').isnull()]) 
     day 
1 2016-12-0 

#convert problematic values to NaT 
print (pd.to_datetime(df['day'], format="%Y-%m-%d", errors='coerce')) 
0 2016-09-01 
1   NaT 
Name: day, dtype: datetime64[ns] 
+0

それは奇妙な、私は実行すると:あなたが使用できるようにだから、いくつかの悪いデータのように見えます

自分のコードだけで、私はあなたと同じ出力を得ます。しかし、私がデータフレーム全体を実行すると、ValueErrorが発生します。 'day'の時刻データは、指定されたフォーマットと一致します。 – Brian

+0

Rargh。あなたの評価は間違っていました、それは悪いデータでした。私はこれをチェックしなくても無駄な時間を信じられません。 – Brian

関連する問題