2016-03-31 2 views
0

У меня есть рамка данных pandas, которая имеет столбец даты, который должен иметь формат '2016-01-17'.Оптимизируйте функцию проверки строки для фрейма данных pandas?

Иногда даты являются нежелательными и могут выглядеть примерно как «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

Использование errors='coerce' для преобразования недопустимых строки даты в NaN. Затем используйте dropna() уронить строки с NaN значениями:

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 
Смежные вопросы