Обработка строк в Dataframe

Я извлек текст из выписки по кредитной карте, нарезал только транзакции в течение всего месяца и сохранил его в списке. Список состоит из 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"

Как выглядят исходные данные? Это файл CSV? PDF? HTML? Можете ли вы показать небольшой пример исходного сырого ввода (без вашей обработки)?

John Zwinck 02.06.2018 02:33

Вы можете использовать нарезку списка, чтобы объединить элементы списка вместе

OneCricketeer 02.06.2018 02:34

Самый простой способ решить эту проблему - исправить это при анализе необработанных данных. Покажите образец необработанных данных, которые вы проанализировали, чтобы получить эти две записи.

Burhan Khalid 02.06.2018 02:39

@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 "

Ryan 02.06.2018 02:39

@BurhanKhalid Я предоставил образец необработанных данных в ответе выше. Я верю, что это то, о чем вы говорите. Я использовал PyPDF2 .extractText () для чтения

Ryan 02.06.2018 02:41

Разместите это в своем вопросе.

user3483203 02.06.2018 02:44

@ cricket_007 Я не знаком с этой концепцией.

Ryan 02.06.2018 08:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны просто работать с исходным необработанным текстом, который, согласно вашему комментарию:

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 02.06.2018 03:18

@Ryan: Если это вам помогло, подумайте о том, чтобы принять его - см. stackoverflow.com/help/someone-answers для получения более подробной информации.

Jan 02.06.2018 08:26

Другие вопросы по теме