Удаление пустых ячеек из файла CSV с помощью python

#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