#python #pandas #csv
#питон #панды #csv — файл #python #pandas #csv
Вопрос:
У меня есть каталог ../customer_data/*
с 15 папками. Каждая папка является уникальным клиентом.
Пример: ../customer_data/customer_1
В каждой папке клиента есть файл CSV с именем surveys.csv
.
ЦЕЛЬ: я хочу перебрать все папки в ../customer_data/*
и найти surveys.csv
для каждого уникального клиента и создать объединенный фрейм данных. Я также хочу добавить столбец в dataframe, где у него есть идентификатор клиента, который является именем папки.
import glob
import os
rootdir = '../customer_data/*'
dataframes = []
for subdir, dirs, files in os.walk(rootdir):
for file in files:
csvfiles = glob.glob(os.path.join(rootdir, 'surveys.csv'))
# loop through the files and read them in with pandas
# a list to hold all the individual pandas DataFrames
df = pd.read_csv(csvfiles)
df['customer_id'] = os.path.dirname
dataframes.append(df)
# concatenate them all together
result = pd.concat(dataframes, ignore_index=True)
result.head()
Этот код не дает мне все 15 файлов. Пожалуйста, помогите
Ответ №1:
Для этого вы можете использовать pathlib
модуль.
from pathlib import Path
import pandas as pd
dfs = []
for filepath in Path("customer_data").glob("customer_*/surveys.csv"):
this_df = pd.read_csv(filepath)
# Set the customer ID as the name of the parent directory.
this_df.loc[:, "customer_id"] = filepath.parent.name
dfs.append(this_df)
df = pd.concat(dfs)
Ответ №2:
Давайте попробуем pathlib с rglob
, который будет рекурсивно искать в вашей структуре каталогов все файлы, соответствующие glob
шаблону. в данном случае опрос.
import pandas as pd
from pathlib import Path
root_dir = Path('/top_level_dir/')
files = {file.parent.parts[-1] : file for file in Path.rglob('*survey.csv')}
df = pd.concat([pd.read_csv(file).assign(customer=name) for name,file in files.items()])
Обратите внимание, что для pathlib вам понадобится Python 3.4 .