Удалить последние два столбца из таблицы в плохо отформатированном текстовом файле?

Чтобы преобразовать данные из Synchro в удобочитаемый формат в excel, необходимо удалить лишние столбцы.

Необработанные данные из текстового файла:

 Lane Group                   WBT   WBR NBL NBT NBR SBL SBT SBR Ø3  Ø7

 Lane Configurations          <1>    0   1   2>  0   1   2   1

Чтение этого текстового файла в формате csv помещает каждую строку в одну строку.

Моя цель: 1.) читать как csv с правильно разделенными строками/столбцами (используя \t в качестве разделителя)

2.) Отбросьте все столбцы и данные после столбца «SBR».

Код, который я использую:

AMtxt = pd.read_csv('AM.txt', sep='\t+', header = None, error_bad_lines=False, warn_bad_lines = False, quoting=3, skiprows=1, engine='python')

AMtxt.drop(columns = AMtxt.columns[-2:], axis = 1, inplace = True)

AMtxt.to_csv('AM.csv')

Когда я пытаюсь использовать это, он удаляет строку «Группа дорожек» для некоторых записей на этапе read_csv.

Как должен выглядеть CSV:

CSV выглядит так для проблемных записей (тех, где есть данные в столбцах, которые я удаляю

Обновлено: РЕШЕНО

AMtxt = pd.DataFrame(open('AM.txt','r').readlines())
AMtxt = AMtxt[0].str.split('\t', expand = True)

for column in AMtxt:
    AMtxt[column] = AMtxt[column].str.strip()

AMtxt.to_csv('AM.csv')

Этот метод работал для меня.

Никогда не добавляйте \n в набор возможных разделителей столбцов, это должен быть только разделитель строк. Это причина ваших перемешанных рядов. Кстати, ваш исходный файл действительно содержит вкладки (символ \t)? Он больше похож на файл с фиксированной шириной, чем на CSV...

Serge Ballesta 10.01.2023 18:43

Спасибо за совет! Я не уверен, использует ли он настоящие вкладки, \t работает как разделитель. Удаление \n приводит к потере большего количества данных, когда я добираюсь до проблемных записей - я теряю каждую строку, а не только те, которые содержат символы в столбцах, которые я хочу удалить

Braden Huggett 10.01.2023 18:54

Я думаю, что правильный способ - обработать файл с помощью read_fwf. Но я не могу сказать больше, если вы не предоставите первые строки файла такими, какие они есть на самом деле...

Serge Ballesta 10.01.2023 23:35

Помогло ли предложение @SergeBallesta использовать функцию «фиксированной ширины»? По крайней мере, из предоставленного вами примера столбцы располагаются с пробелами, а не с вкладками, но это может быть проблемой копирования и вставки. Спасибо! :)

Zach Young 11.01.2023 15:21

Предложение Сержа может сработать, но оно приводит к новой проблеме, когда я не могу понять, как читать файл с разделителем, используя read_fwf. Он может прочитать файл .txt без ошибок, но все это в одном столбце AMtxt = pd.read_fwf('AM.txt', header = None, delimiter = "\s+")

Braden Huggett 13.01.2023 20:44

Вместо того, чтобы добавлять решение на свой вопрос, вы должны добавить его в качестве ответа. (Относитесь к этому так, как будто вы отвечаете на чей-то вопрос.)

Ouroborus 13.01.2023 21:34
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
3
6
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Решение, которое сработало для меня:

AMtxt = pd.DataFrame(open('AM.txt','r').readlines())
AMtxt = AMtxt[0].str.split('\t', expand = True)

for column in AMtxt:
    AMtxt[column] = AMtxt[column].str.strip()

AMtxt.drop(columns = AMtxt.columns[-(len(AMtxt.columns) - 14):], axis = 1, inplace = True)
AMtxt.to_csv('AM.csv')

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.

Community 15.01.2023 10:59

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