Структура вашего кода совершенно в порядке.Конкатенация списка фреймов данных более эффективна, чем повторное добавление к существующему фрейму данных.
Установка 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)
Если вы выберете этот метод, вы можете потерять читабельность, поэтому документируйте, что вы делаете.