Импортируйте несколько файлов csv в pandas и объедините в один DataFrame, где 1-й столбец одинаков во всех csv, а заголовки данных отсутствуют, только имя файла - PullRequest
0 голосов
/ 30 мая 2020

Импортировать несколько файлов CSV в pandas и объединить в один DataFrame, где 1-й столбец одинаков во всех CSV, а заголовки данных отсутствуют, только имя файла.

Во всех CSV только имя файла описывает значение данных в Это. Заголовок отсутствует во всех файлах CSV. 1-й столбец является общим для всех файлов CSV.

как объединить все файлы CSV в один набор данных в python. код:

import os
import pandas as pd
import glob

path= "....\\data"
os.chdir(path)
results = pd.DataFrame()

for counter, current_file in enumerate(glob.glob("*.csv")):
    namedf = pd.read_csv(current_file, header=None)
    print(namedf)
    results = results.merge(namedf, on='0')

results.to_csv('Combined.csv', index=None, header=None)

1 Ответ

0 голосов
/ 30 мая 2020

Как вы написали без заголовков , я предполагаю, что чтение должно выполняться скорее с header=None. Использование header=filename - очень странная концепция.

Я предполагаю, что у вас есть первые 2 входных DataFrames примерно так:

   0     1     2
0  A  Bbb1  Ccc1
1  B  Bbb2  Ccc2
2  C  Bbb3  Ccc3
3  D  Bbb4  Ccc4

   0     1     2
0  A  Ddd1  Eee1
1  B  Ddd2  Eee2
2  C  Ddd3  Eee3
3  D  Ddd4  Eee4

с тем же содержимым в первом столбце.

Насколько я понимаю, вы хотите объединить (на самом деле объединить ) их по горизонтали , по общим значениям в первом столбце.

Чтобы объединить первые 2 фрейма данных, скажем, df и df2 , вы можете:

df = pd.merge(df, df2, on=[0], how='outer')
df.columns = [ n for n in range(len(df.columns)) ]

Затем объединенное содержимое возвращается в df , а столбцы переименовываются в последовательные целые числа :

   0     1     2     3     4
0  A  Bbb1  Ccc1  Ddd1  Eee1
1  B  Bbb2  Ccc2  Ddd2  Eee2
2  C  Bbb3  Ccc3  Ddd3  Eee3
3  D  Bbb4  Ccc4  Ddd4  Eee4

Таким образом, вы не повторяете первый столбец (ключ слияния).

Итак, ваш l oop для чтения и слияния исходных файлов может быть примерно таким:

for counter, current_file in enumerate(glob.glob("*.csv")):
    print(f'{counter}: {current_file}')
    if counter == 0:
        df = pd.read_csv(current_file, header=None)
    else:
        df2 = pd.read_csv(current_file, header=None)
        df = pd.merge(df, df2, on=[0], how='outer')
        df.columns = [ n for n in range(len(df.columns)) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...