Удалить последний столбец из большого файла CSV - PullRequest
0 голосов
/ 05 августа 2020

У меня есть большой CSV-файл, который я хотел бы загрузить в postgres с помощью datagrip. Когда я загружаю его, я получаю следующую ошибку для нескольких записей:

11807:98: actual: value separator (,), expected: record separator (\n) 

Проблема в том, что распознается только 19 столбцов и что в очень немногих записях содержится 20 значений. Для этих записей он вообще не импортирует запись. Я действительно хочу иметь все строки в моей базе данных.

Я думал, что это будет кусок пирога в python. Итак, я начал работать с pandas и загрузил данные следующей строкой:

 df = pd.read_csv('filename.csv', sep='delimiter', header=None)

Это действительно содержит файл. Однако гораздо сложнее, чем я ожидал, либо удалить все значения, которые находятся в строках после 19 запятой, либо просто добавить полный 20-й столбец, который я могу позже удалить. Такое ощущение, что это банальный вопрос, и мне нужен пу sh в правильном направлении.

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

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

Вместо этого используйте модуль csv, потому что он не пытается прочитать файл как стол фиксированной ширины.

import csv

with open('filename.csv', 'r') as i, open('fixed.csv', 'w') as o:
    cr = csv.reader(i)
    cw = csv.writer(o)
    for row in cr:
        cw.writerow(row[0:19])


3 голосов
/ 05 августа 2020

Это создает фрейм данных с 30 столбцами, а затем удаляет все столбцы после столбца 20.

df = pd.DataFrame({f"col{i}":[1,2,3] for i in range(30)})

df = df.drop(columns=[c for c in df.columns[20:]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...