Чтение нескольких CSV-файлов в кадр данных Pandas - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь прочитать несколько файлов CSV во фрейм данных Pandas.CSV не разделены запятыми - поля разделяются точкой с запятой ";".

Мой код основан на ответах здесь .

Мои данные - всев определенном подкаталоге: /data/luftdaten/5331

Это то, что я запускаю:

import glob
import pandas as pd

path =r'data/luftdaten/5331' # use your path

filenames = glob.glob(path + "/*.csv")
count_files = 0
dfs = []
for filename in filenames:
    if count_files ==0:
        dfs.append(pd.read_csv(filename, sep=";")) 
        count_files += 1
    else:
        dfs.append(pd.read_csv(filename, sep=";", skiprows=[0]))
        count_files +=1

big_frame = pd.concat(dfs, ignore_index=True)

Я использую count_files для мониторинга, если это первый CSV - в этом случае я импортирую заголовки,В противном случае он пропускает заголовки.

Код выполняется ОК.

Если я запускаю его с одним файлом в этом каталоге, все в порядке:

big_frame.info()

Вывод:

RangeIndex: 146 entries, 0 to 145
Data columns (**total 12 column**s):
sensor_id      146 non-null int64
sensor_type    146 non-null object
etc......

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

Вывод с 4 файлами:

RangeIndex: 1893 entries, 0 to 1892
Data columns (total **33 columns**):
-2.077                 1164 non-null float64
-2.130                 145 non-null float64
2.40                   145 non-null float64

Запускbig_frame.head() в одной версии CSV дает это, с правильными именами столбцов:

output from importing single CSV

При запуске того же самого с четырьмя импортированными файлами мне это:

output from importing 4 CSV files (cropped right)

Есть ли что-то очевидное, что я делаю, что вызывает увеличение не только количества строк, но и столбцов?

Ваше руководство будет с благодарностью!

1 Ответ

0 голосов
/ 15 мая 2018

Причина, по которой он в настоящее время не работает, заключается в том, что вы делаете skiprows=[0] для каждого файла после первого, что в новом кадре данных вторая строка (индекс 1) используется в качестве заголовков столбцов.Следовательно, когда кадры объединяются, появляется много и много заголовков столбцов, которые не совпадают.Если вы удалите skiprows=[0], он должен работать.

Предполагая, что все ваши файлы имеют одинаковый заголовок (или у вас все в порядке с NaN, когда они различаются), вы сможете сделать это воднострочник:

big_frame = pd.concat([pd.read_csv(f, sep=';') for f in glob.glob(path + "/*.csv")],
                      ignore_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...