Как эффективно объединить столбцы из разных файлов CSV на основе идентификаторов python - PullRequest
0 голосов
/ 20 июня 2020

У меня 4 файла csv. Каждый файл имеет разные поля, например, name, id_number и т.д. c. Каждый файл говорит об одном и том же, для чего есть уникальный идентификатор, который есть у каждого файла. Итак, я хотел бы объединить поля каждого из 4 файлов в один DataFrame. Например, один файл содержит first_name, другой файл - last_name, затем я хочу объединить эти два, чтобы у меня было имя и фамилия для каждого объекта.

Это тривиально, но я бы хотел чтобы узнать наиболее эффективный способ, или если есть какая-то встроенная функция, которая делает это очень эффективно.

Файлы выглядят примерно так:

file1:

id   name   age pets
b13  Marge  18  cat
y47  Dan    13  dog
h78  Mark   20  lizard

файл2:

id   last_name   income  city
y47  Schmidt     1800    Dallas
b13  Olson       1670    Paris
h78  Diaz        2010    London

файлы 3 и 4 похожи на эти с разными полями. Идентификаторы не обязательно упорядочены. И снова цель состоит в том, чтобы один DataFrame выглядел так:

id   name   age pets    last_name income city
b13  Marge  18  cat     Olson     1670   Paris
y47  Dan    13  dog     Schmidt   1800   Dallas
h78  Mark   20  lizard  Diaz      2010   London

Я сделал следующее:

file1 = pd.read_csv('file1.csv')
file2 = pd.read_csv('file2.csv')
file3 = pd.read_csv('file3.csv')
file4 = pd.read_csv('file4.csv')

f1_group = file1.groupby(['id'])
f2_group = file2.groupby(['id'])
f3_group = file3.groupby(['id'])
f4_group = file4.groupby(['id'])
data = []
for id1, group1 in f1_group:
    for id2, group2 in f2_group:
        for id3, group3 in f3_group:
            for id4, group4 in f4_group:
                if id1 == id2 == id3 == id4:
                   frames = [group1, group2, group3, group4]
                   con = pd.concat(frames, axis=1)
                   data.append(con)  

Это работает, но крайне неэффективно. Если бы я мог исключить элемент, который уже рассматривался, из group1, group2, et c, это помогло бы, но все равно было бы неэффективно.

Заранее спасибо.

1 Ответ

0 голосов
/ 20 июня 2020

Привет, может ты попробуешь это :)

https://www.freecodecamp.org/news/how-to-combine-multiple-csv-files-with-8-lines-of-code-265183e0854/

import os
import glob
import pandas as pd
#set working directory
os.chdir("/mydir")

#find all csv files in the folder
#use glob pattern matching -> extension = 'csv'
#save result in list -> all_filenames
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
#print(all_filenames)

#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...