чтение данных с большим количеством столбцов, чем ожидалось, в информационный кадр - PullRequest
0 голосов
/ 29 октября 2018

У меня есть несколько CSV-файлов, которые я загружаю в каталог.

каждый .csv должен иметь 3 столбца информации. Заголовок одного из этих файлов выглядит так:

17/07/2014,637580,10.755
18/07/2014,61996,10.8497
21/07/2014,126758,10.8208
22/07/2014,520926,10.8201
23/07/2014,370843,9.2883

Код, который я использую для чтения .csv в фрейм данных (df):

df = pd.read_csv(adj_directory+'\\'+filename, error_bad_lines=False,names=['DATE', 'PX', 'RAW'])

Где я назову три столбца (DATE, PX и RAW).

Это прекрасно работает, когда файл отформатирован правильно. Однако я заметил, что иногда .csv имеет немного другой формат и может выглядеть, например:

09/07/2014,26268315,,
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,,
15/07/2014,205019,10.8607

, где отсутствует значение столбца и в месте значений появляется лишняя запятая. Это означает, что файл не загружается в фрейм данных (df фрейм данных пуст).

Есть ли способ прочитать данные в информационном кадре с дополнительной запятой (игнорируя ошибочную строку), чтобы df выглядел так:

09/07/2014,26268315,NaN
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,NaN
15/07/2014,205019,10.8607

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вероятно, лучше всего исправить исходный файл, чтобы пропущенные значения не были заполнены ,. Но при необходимости вы можете исправить файл в python, заменив ,, просто , (построчно). Принимая ваш плохой файл как test.csv:

import re
import csv

patt = re.compile(r",,")

with open('corrected.csv', 'w') as f2:
    with open('test.csv') as f:
        for line in csv.reader(map(lambda s: patt.sub(',', s), f)):
            f2.write(','.join(str(x) for x in line))
            f2.write('\n')
f2.close()
f.close()

Выход: corrected.csv

09/07/2014,26268315,
10/07/2014,6601181,16.3857
11/07/2014,916651,12.5879
14/07/2014,213357,
15/07/2014,205019,10.8607

Тогда вы сможете читать этот файл без проблем

import pandas as pd

df = pd.read_csv('corrected.csv', names=['DATE', 'PX', 'RAW'])

         DATE        PX      RAW
0  09/07/2014  26268315      NaN
1  10/07/2014   6601181  16.3857
2  11/07/2014    916651  12.5879
3  14/07/2014    213357      NaN
4  15/07/2014    205019  10.8607
0 голосов
/ 29 октября 2018

Была эта проблема вчера. Вы пробовали:

pd.read_csv(adj_directory+'\\'+filename, 
            error_bad_lines=False,names=['DATE', 'PX', 'RAW'], 
            keep_default_na=False,
            na_values=[''])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...