Преобразование столбцов в pandas в_datetime с определенным форматом

#python #pandas #datetime

#python #pandas #datetime

Вопрос:

У меня есть следующий код:

 import pandas as pd
import datetime
df = pd.read_html("https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States")[1]
df = df[:-1]
df.rename(columns={'Presidency[a].1':"Term"}, inplace = True)
df[['Start', 'End']] = df.Term.str.split("–", expand = True)
df['Start'] = pd.to_datetime(df['Start'].str.strip(), format = '%B %d, %Y', dayfirst = False)
  

Когда я запускаю этот код, я получаю следующую ошибку:

 ValueError: unconverted data remains: [i]
  

Пожалуйста, сообщите

Ответ №1:

Когда я проверил данные, в них есть несколько шумных записей, таких как:

  'March 4, 1913',
 'March 4, 1913',
 'March 4, 1921',
 'August 2, 1923[r]',
 'August 2, 1923[r]',
  

Вам нужно будет очистить их, разделив на
df.Start = pd.Series([i.split('[')[0] for i in df.Start.tolist()])

Тогда все должно работать нормально. Смотрите результат:

 In [28]: df.Start = pd.to_datetime(df['Start'].str.strip(), format = '%B %d, %Y', dayfirst = False)

In [29]: df.Start
Out[29]: 
0    1789-04-30
1    1789-04-30
2    1797-03-04
  

Ответ №2:

У некоторых дат были аннотации, например, [i] в конце строки.

Ниже используется замена строки pandas регулярным выражением для удаления проблемных аннотаций.

df['Start'] = pd.to_datetime(df['Start'].str.replace("[[a-z]]", "", regex=True))

Ответ №3:

Или просто…

 df.Start = df.Start.str.split("[", expand=True)
  

перед преобразованием в datetime