2016-09-27 3 views
3

Пытается разобрать столбцы pandas df['day'] в тип даты. Значения текущие записываются как строки, такие как: 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, так как оба соответствуют ненулевым (десятичным) номерам.

Получение другая ошибка:

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: время данных 'день' соответствует указанному формату' – Brian

+0

Rargh. Ваша оценка была на месте, это были плохие данные. Я не могу поверить, сколько времени я потратил, не проверяя это. – Brian

Смежные вопросы