Я извлек текст из выписки по кредитной карте, нарезал только транзакции в течение всего месяца и сохранил его в списке. Список состоит из 404 строк, и отрывок из этого списка показан ниже:
['Apr',
'27',
'UBER',
'TECHNOLOGIES',
'INC866-576-1039CA',
'$10.93',
'Apr',
'27',
'UBER',
'TECHNOLOGIES',
'INC866-576-1039CA',
'$11.38',
'Apr',
'28',
'COSTCO',
'WHSE',
'#1018HOUSTONTX',
'$105.02']
Как видите, список соответствует стандартному формату, в котором одна транзакция состоит из 3 частей: Дата (2 отдельные строки), Описание (2-5 строк) и Сумма (1 строка).
Моя цель - создать фрейм данных Pandas на основе этой информации, но мне сложно найти способ манипулировать строками, чтобы правильно сегментировать каждую категорию (Дата, Описание, Количество). Я считаю, что для этого мне нужно использовать некоторую комбинацию регулярного выражения и цикла.
Согласно комментариям, необработанные данные, извлеченные из выписки по кредитной карте (PDF), также показаны ниже:
" \nApr 27\nUBER TECHNOLOGIES\nINC866-576-1039CA\n$10.93\nApr 27\nUBER TECHNOLOGIES\nINC866-576-1039CA\n$11.38\nApr 28\nCOSTCO WHSE #1018HOUSTONTX\n$105.02\n"
Вы можете использовать нарезку списка, чтобы объединить элементы списка вместе
Самый простой способ решить эту проблему - исправить это при анализе необработанных данных. Покажите образец необработанных данных, которые вы проанализировали, чтобы получить эти две записи.
@JohnZwinck исходные данные - это PDF. Фактическая выписка по кредитной карте. Исходные данные выглядят примерно так: «\ nApr 27 \ nUBER TECHNOLOGIES \ nINC866-576-1039CA \ n $ 10.93 \ nApr 27 \ nUBER TECHNOLOGIES \ nINC866-576-1039CA \ n $ 11.38 \ nApr 28 \ nCOSTCO WHSE # 1018HOUSTONTX \ n \ n "
@BurhanKhalid Я предоставил образец необработанных данных в ответе выше. Я верю, что это то, о чем вы говорите. Я использовал PyPDF2 .extractText () для чтения
Разместите это в своем вопросе.
@ cricket_007 Я не знаком с этой концепцией.






Вы должны просто работать с исходным необработанным текстом, который, согласно вашему комментарию:
Apr 27
UBER TECHNOLOGIES
INC866-576-1039CA
$10.93
Apr 27
UBER TECHNOLOGIES
INC866-576-1039CA
$11.38
Apr 28
COSTCO WHSE #1018HOUSTONTX
$105.02
Похоже, что это формат:
DATE
VENDOR
[EXTRA INFO, OPTIONAL]
$AMOUNT
Вы можете читать строки в цикле, примерно так:
txs = []
for line in file:
date = pd.to_datetime(line)
vendor = next(file)
amount = next(file) # might not be amount yet
while not amount.startswith('$'):
vendor += amount
amount = next(file)
txs.append((date, vendor, amount))
# now create DataFrame
pd.DataFrame(txs)
Идея здесь состоит в том, чтобы читать файл по частям, с одной итерацией цикла на транзакцию.
Это мой первый вопрос о stackoverflow, и я поражен быстротой и общей реакцией сообщества, особенно Джона. Спасибо - я воспользуюсь этим и заставлю работать. Очень ценю ваш опыт.
@Ryan: Если это вам помогло, подумайте о том, чтобы принять его - см. stackoverflow.com/help/someone-answers для получения более подробной информации.
Как выглядят исходные данные? Это файл CSV? PDF? HTML? Можете ли вы показать небольшой пример исходного сырого ввода (без вашей обработки)?