#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