How to import multiple csvs, assign variable and concatenate into one DataFrame with Pandas concat?

时间:2018-06-08 16:07:16

标签: python python-3.x pandas performance dataframe

I would like to optimize the code below. It works but I would like suggestions if it can be done more concisely and efficiently.

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)

Any ideas ? Thank you in advance

Pandas 0.21.1 and Python 3.6.5

1 个答案:

答案 0 :(得分:1)

您的代码结构非常好。连接数据帧列表比重复附加到现有数据帧更有效。

设置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)

如果选择此方法,可能会失去可读性,因此请记录您正在做的事情。