2016-03-31 11 views
0

私はパンダデータフレームを持っています。このデータフレームには日付カラムがあり、フォーマットは '2016-01-17'でなければなりません。パンダのデータフレームの文字列チェック機能を最適化しますか?

時々、日付はジャンクで、「0-1274753-3」のように見えますが、これらの行を削除したい場合があります。

文字列が日付かどうかをチェックし、列内のすべての項目に適用して失敗した行を投げ捨てる機能を定義しようとしました。これは、大規模なデータフレーム全体では遅いプロセスであり、私はより良いソリューションを見つけることを望んでいます。

現在の試行は、次のようになります。

from dateutil.parser import parse 

def is_date (string): 
    try: 
     parse (string) 
     return True 
    except ValueError: 
     return False 

df = df [df.datecol.apply(is_date)] 

答えて

1

NaNに無効な日付文字列を変換するにはerrors='coerce'を使用してください。

import pandas as pd 
df = pd.DataFrame({'datecol':['2016-01-17', '0-1274753-3']}) 
df['datecol'] = pd.to_datetime(df['datecol'], errors='coerce') 
# this drops all rows which contain NaN 
df = df.dropna(axis=0, how='any') 
# alternatively, use this to drop all rows which contain NaN in the datecol column 
# df = df.loc[pd.notnull(df['datecol'])] 
print(df) 

利回り

 datecol 
0 2016-01-17 
:次に NaN値を持つ行を削除するには dropna()を使用
関連する問題