Как добавить несколько CSV-файлов и создать DataInframe MultiIndex - PullRequest
1 голос
/ 19 сентября 2019

У меня есть несколько CSV-файлов в папке.Цель состоит в том, чтобы добавить файлы csv в один фрейм pd.

Вопрос в том, как мы можем использовать панд для объединения всех файлов в папке, но в то же время ассоциировать определенные ключи с каждым из фрагментовразделенный DataFrame с использованием аргумента keys: keys.

Это означает, что теперь мы можем выбирать каждый блок по ключу:

Например, учитывая два файла CSV в папке, каждыйCSV имеют 3 столбца (A, B, C) и две строки.

CSV-файл: Book1

A0 B0 C0

A1 B1C1

и

CSV-файл: Book2

A2 B2 C2

A3 B3 C3

Ожидаемыйкадры, как показано на рисунке.

enter image description here

Обратите внимание на индексы Book1 и Book2 в левом столбце.Это имя происходит из указанного CSV-файла.

Пока у меня есть следующий код

# match the pattern ‘csv’ in the folder
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

Но где под следующей строкой кода мне нужно изменить, чтобы достичь указанной цели?

combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])

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

.loc['Book1']

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

вы можете добавить дополнительный столбец к каждому фрейму данных, используя метод assign;это можно сделать после их чтения и до объединения

combined_csv = pd.concat([pd.read_csv(f).assign(name=f) for f in all_filenames ])

Это добавит столбец name со всеми значениями, равными имени файла f.

Когда все наборы данных будут объединены,Вы можете установить MultiIndex

combined_csv.reset_index(drop=True, inplace=True)

combined_csv.set_index([combined_csv.name, combined_csv.index], inplace=True)
1 голос
/ 19 сентября 2019

Найдите код ниже:

import pandas as pd
dfs=[]
for f in all_filenames:
    df=pd.read_csv(f)
    df['index_name']=f.split('.')[0]
    dfs.append(df)
df_combined = pd.concat(dfs)
df_combined.set_index('index_name', inplace=True)
0 голосов
/ 19 сентября 2019

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

books = ['book1' 'book2',...'bookn']

i = 1

combined_csv = pd.DataFrame(columns=['Book', 'A', 'B', 'C'])

for book in books:
    data = pd.DataFrame('book{}.csv'.format(i))
    data.insert(0, 'Book', 'Book'.format(i))
    combined_csv = combined_csv.append(data, ignore_index=True)
    i += 1

combined_csv.set_index('Book', inplace=True)

Дайте мне знать, если это поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...