#python #regex #pandas #dataframe #data-cleaning
#python #регулярное выражение #панды #фрейм данных #очистка данных
Вопрос:
Я пытаюсь создать функцию, которая заменяет столбец даты фрейма данных регулярным выражением.
# import regex
import re
# create a copy of data
data2 = data
loop = len(data2) - data['Date of Publication'].isna().sum()
for i in range (loop):
if (pd.notna(data2.loc[i]["Date of Publication"])):
# copy the content of the date into old-value
old_value = data2.loc[i]["Date of Publication"]
# regex to match the first 4 digits of the old_value
new_value = re.findall("d{4}", str(old_value))
# replace the old value
data2.loc[i, 'Date of Publication'] = new_value[0]
выдает ошибку
IndexError Traceback (most recent call last)
<ipython-input-66-be514cf910bf> in <module>()
15
16 # replace the old value
---> 17 data2.loc[i, 'Date of Publication'] = new_value[0]
18
IndexError: list index out of range
Комментарии:
1. Поскольку это не программа, которую мы можем запустить, это просто предположение, но
new_value
в нем что-то есть? Что делать, еслиre.findall("d{4}", str(old_value))
ничего не находит?2. Вы могли бы попробовать
data2.loc[i:, 'Date of Publication'] = new_value[0]
. Я только что добавил двоеточие.
Ответ №1:
В python data2.loc[a, b]
это не то же самое, что data2.loc[a][b]
. В вашей последней строке кода используется неправильная форма индексации.
data2.loc[a,b]
это сокращение для data2.loc[(a, b)]
, при этом индекс представляет собой один кортеж. Numpy может сбить вас с толку, потому что он проверяет, является ли индекс кортежем, и обрабатывает его ожидаемым образом.