Как импортировать несколько CSV, назначить переменную и объединить в один DataFrame с Pandas concat? - PullRequest
0 голосов
/ 08 июня 2018

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

import os
import glob
import pandas as pd
import numpy as np

files = glob.glob(os.path.join('data','*.csv'))

dfs = []

for file in files:

       variable = os.path.basename(file).split("_")[0] #split filename 
       df= pd.read_csv(file)
       df['variable'] = variable #assign variable
       dfs.append(df)

finalDf = pd.concat(dfs, ignore_index = True)

Есть идеи?Заранее спасибо

Панды 0.21.1 и Python 3.6.5

1 Ответ

0 голосов
/ 08 июня 2018

Структура вашего кода совершенно в порядке.Конкатенация списка фреймов данных более эффективна, чем повторное добавление к существующему фрейму данных.

Установка dtype

То, что вы можете попробовать и оптимизировать, - это чтение файла CSV, т. Е. df = pd.read_csv(file).Мое единственное предложение - указать параметр dtype со словарем, сопоставляя имена столбцов с типами.В частности, если у вас есть столбцы с категориальными данными, сопоставьте их с 'category', чтобы обеспечить оптимальное использование памяти.

Понимание списка + назначение

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

dfs = [pd.read_csv(file).assign(variable=os.path.basename(file).split('_')[0]) \
       for file in glob.glob(os.path.join('data','*.csv'))]

finalDf = pd.concat(dfs, ignore_index=True)

Если вы выберете этот метод, вы можете потерять читабельность, поэтому документируйте, что вы делаете.

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