Панды read_csv () условно пропускают строку заголовка - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь прочитать файл csv, но мои CSV-файлы отличаются.Некоторые имеют другой формат, а некоторые имеют другой.Я пытаюсь добавить элементы управления, чтобы мне не нужно было редактировать мой код или мой входной файл.

Моя проблема в том, что некоторые из этих CSV-файлов имеют строку String над заголовками столбцов.Пример:

Created on 12-11-2018,CryptoDataDownload.com
Date,Symbol,Open,High,Low,Close,Volume From,Volume To
2018-12-11 11-AM,ADABTC,8.6e-06,8.61e-06,8.55e-06,8.57e-06,301141.7,2.59
2018-12-11 10-AM,ADABTC,8.69e-06,8.72e-06,8.6e-06,8.6e-06,236949.63,2.05

Если я импортирую это, разделитель будет использовать первую строку и разделит файл на два столбца как Created on 12-11-2018 и CryptoDataDownload.com.

Вот как выглядит df.head():

                        Created on 12-11-2018 CryptoDataDownload.com
Date             Symbol Open     High     Low      Close              Volume From                          Volume To
2018-12-11 11-AM ADABTC 8.6e-06  8.61e-06 8.55e-06 8.57e-06              301141.7                               2.59
2018-12-11 10-AM ADABTC 8.69e-06 8.72e-06 8.6e-06  8.6e-06              236949.63                               2.05
2018-12-11 09-AM ADABTC 8.7e-06  8.7e-06  8.62e-06 8.69e-06             509311.39                               4.41
2018-12-11 08-AM ADABTC 8.69e-06 8.7e-06  8.63e-06 8.7e-06              111367.34                             0.9656

Я хочу проверить, есть ли в этом файле эта строка, и пропустить ее, если это так.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы можете пропустить строки, начинающиеся с определенного символа, используя аргумент 'comment' в команде pandas read_csv.В вашем случае вы можете пропустить строки, начинающиеся с буквы «C», используя следующий код:

filename = '/path/to/file.csv'
pd.read_csv(filename, comment = "C")
0 голосов
/ 12 декабря 2018

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

filename = '/path/to/file.csv'
skiprows = int('Created in' in next(open(filename)))
df = pd.read_csv(filename, skiprows=skiprows)

ХорошоПрактика будет использовать менеджер контекста, так что вы также можете сделать это:

filename = '/path/to/file.csv'
skiprows = 0
with open(filename, 'r+') as f:
    for line in f:
        if line.startswith('Created '):
            skiprows = 1
        break
df = pd.read_csv(filename, skiprows=skiprows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...