Импорт нескольких CSV-файлов в объединенный фрейм данных с каждым столбцом, добавленным в фрейм данных - PullRequest
0 голосов
/ 01 октября 2018

У меня есть много CSV-файлов, которые выглядят так:

file_1.csv

name  num
Ab     8
Dd     9
Cc     20
Kk     69

file_2.csv

name  num
Ab    23
Dd    3
Kk    20
Jj    30

и так далее ... Теперь вы видите, что есть имя, которое может не появляться в первом csv, но появляется в каком-то другом csv.

Теперь моя главная задача - собрать их все вместе в одном фрейме данных (сцеплении), например: big_df

name num num2 num3....numN
 Ab   8    23   ...
 Dd   9     3   ...

где N - число csvфайлы с колонкой num


Я довольно долго копался в поисках решения, и вот что я получил:

path = 'E:\\my_path\\**\\*.csv'
all_rec = iglob(path, recursive = True)
dataframes = (pd.read_csv(f, sep = ';', skiprows = 1, header = None) for f in all_rec)
big_df = pd.concat(dataframes, ignore_index = True)

У меня не получилось.

1 Ответ

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

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

Ключ здесь в том, что вы хотите установить name в качестве индекса, таким образом pd.concatиспользует это для выравнивания DataFrames, когда вы присоединяетесь к ним.Вы можете использовать regex для получения номеров файлов, а затем добавить это к имени столбца.

import os
import re
import pandas as pd

path = 'define_your_path'
files = [x for x in os.listdir(path) if '.csv' in x]
#['file_1.csv', 'file_2.csv']

lst = []
for f in files:
    lst.append(pd.read_csv(path+f)
                 .set_index('name')
                 .add_suffix(re.search('.*_(.*)\.', f).group(1)))

big_df = pd.concat(lst, axis=1, sort=False)

Вывод: big_df

    num1  num2
Ab   8.0  23.0
Dd   9.0   3.0
Cc  20.0   NaN
Kk  69.0  20.0
Jj   NaN  30.0

Входные данные:

file_1.csv:

name,num
Ab,8
Dd,9
Cc,20
Kk,69

file_2.csv:

name,num
Ab,23
Dd,3
Kk,20
Jj,30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...