#python #pandas #csv
#python #pandas #csv
Вопрос:
У меня есть текстовый файл, который я конвертирую в csv с помощью python. В текстовом файле есть столбцы, которые задаются с использованием нескольких пробелов. Мой код удаляет строку, преобразует 2 пробела в строке в запятые, а затем снова разделяет строки. Когда я делаю это, столбцы не выстраиваются в линию, потому что в некоторых столбцах больше пробелов, чем в других. Как я могу добавить что-то в свой код, что удалит пустые ячейки в моем CSV-файле?
Я попытался преобразовать файл csv в базу данных pandas, но когда я запускаю
import pandas as pd
df = pd.read_csv('old.Csv')
delim_whitespace=True
df.to_csv("New.Csv", index=False)
возвращает ошибку ParserError: Error tokenizing data. C error: Expected 40 fields in line 10, saw 42
Код, который удаляет строки и разделяет их
import csv
txtfile = r"Old.txt"
csvfile = r"Old.Csv"
with open(txtfile, 'r') as infile, open(csvfile, 'w', newline='') as outfile:
stripped = (line.strip() for line in infile)
replace = (line.replace(" ", ",") for line in stripped if line)
lines = (line.split(",") for line in replace if infile)
writer = csv.writer(outfile)
writer.writerows(lines)
Комментарии:
1. Можете ли вы вставить дополнительную информацию в свои данные? Например, у вас есть пустые строки или столбцы? Как ваши данные разделяются?
2. Данные в исходном текстовом файле разделены несколькими пробелами. Когда текст описания заканчивается, заполняются пробелы для выравнивания чисел в первом числовом столбце (более короткое описание добавит больше пробелов)
3. @TBrownell добавьте skiprow=[1] в приведенный ниже код, он должен работать.
Ответ №1:
Одним из решений является предварительное объявление имен столбцов, чтобы заставить pandas использовать данные с разным количеством столбцов. Что-то вроде этого должно работать :
df = pd.read_csv('myfilepath', names = ['col1', 'col2', 'col3'])
Вам придется самостоятельно адаптировать имена разделителей и столбцов / количество столбцов.
Комментарии:
1. объявление имен столбцов не изменит данные, верно? В некоторых ячейках у меня все равно были бы пробелы, и данные не выстраивались бы в линию, это просто ограничило бы количество столбцов
Ответ №2:
(отредактировано) приведенный ниже код должен работать для вашего текстового файла:
a b c d e
=============================
1 qwerty 3 4 5 6
2 ewer e r y i
3 asdfghjkutrehg c v b n
вы можете попробовать:
import pandas as pd
df = pd.read_fwf('textfile.txt', delimiter=' ', header=0, skiprows=[1])
df.to_csv("New.csv", index=False)
print(df)
Unnamed: 0 a b c d e
0 1 qwerty 3 4 5 6
1 2 ewer e r y i
2 3 asdfghjkutrehg c v b n