2016-05-28 5 views
0

В основном я импортировал csv около 17000 строк в базу данных pandas. Существует столбец даты, который был импортирован как int64, потому что качество данных очень плохое. Примеры дат включают 11969, 12132001, 1022013 и т. Д. Поэтому я считаю, что я хочу получить только последние 4 числа из столбца даты.Python - Получить и заменить на основе регулярного выражения

Так код, который я использовал это:

test_str = str(df['Date']) 
flags = re.MULTILINE 
p = r'\d{4}$' 
result = re.findall(p, test_str, flags) 

Когда я print(result) только 60 из 17000 возвращается значение. Я предполагаю, что это только оценивает уникальность, но после долгого боя с поисковой системой я не могу понять это. Любые идеи о том, как я могу обойти это?

ответ

1

Похоже, ваш метод на самом деле работает (по крайней мере, для примера вы дали):

import pandas as pd 
rng = pd.Series([11969, 12132001, 1022013, 1022013]) 
test_str = str(rng) 
flags = re.MULTILINE 
p = r'\d{4}$' 
result = re.findall(p, test_str, flags) 
print(result) 
# ['1969', '2001', '2013', '2013'] # not just unique values 

Но этот метод преобразования ряда pandas в строку причудливым способ сделать это и Безразлично» t воспользоваться pandas присущей структуре.

Вы могли бы рассмотреть возможность сделать это:

df['year_int'] = df['Date'] % 10000 

получить последние четыре цифры, если df['Date'] является int64. Или это:

df['year_str'] = df['Date'].apply(lambda x: str(x)[-4:]) 

Если вы предпочитаете преобразовывать в строку и затем принимать последние четыре символа.

print(df) 
#  Date year_int year_str 
# 0  11969  1969  1969 
# 1 12132001  2001  2001 
# 2 1022013  2013  2013 
# 3 1022013  2013  2013 
+0

Большое спасибо - Ваши альтернативные способы работы. И да, я знаю с образцом/небольшим набором данных, с которым работал мой регулярный метод. Его просто я получил только 60 из 17000 строк. Как вы сказали, я должен делать что-то странное с пандами. Должно заглянуть в это немного больше. – Brrrr