导入多个嵌套的csv文件并将其串联到一个DataFrame中

时间:2019-02-21 15:46:55

标签: python pandas csv dataframe concatenation

我正在尝试读取多个结构相同(列名)且位于几个文件夹中的CSV文件。我的主要目的是将这些文件连接到一个熊猫数据框中。 请在附件的文件夹位置分布下面找到附件,因此每个文件夹包含5个CSV文件。 是否有任何预定义的功能或功能可以帮助??

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:4)

您可以使用glob.glob('*.csv')查找所有csv,然后将其全部合并。

import glob
import pandas as pd

csv_paths = glob.glob('*.csv')
dfs = [pd.read_csv(path) for path in csv_paths]
df = pd.concat(dfs)

答案 1 :(得分:1)

使用os.walk()pd.concat()

import os
import pandas as pd
outdir = [YOUR_INITIAL_PATH]
df_final = pd.DataFrame(columns=['column1', 'column2', 'columnN']) # creates an empty df with the desired structure
for root, dirs, filenames in os.walk(outdir):
    for f in filenames:
        if f.endswith('.csv'):
            df_temp = pd.read_csv(root + '\\' + f)
            df_final = pd.concat([df_final, df_temp])

答案 2 :(得分:1)

您可以使用os.walk()遍历目录树(example)中的文件。 pd.read_csv()将单个文件读入数据帧。 pd.concat(df_list)将df_list中的所有数据帧连接在一起。

我不认为有一种方法可以将以上所有内容结合在一起,以方便您使用。

答案 3 :(得分:1)

疯狂的猕猴桃给了您正确的答案。一种替代方法是使用dask,假设您的文件夹结构为

data
├── 2016
│   ├── file01.csv
│   ├── file02.csv
│   └── file03.csv
├── 2017
│   ├── file01.csv
│   ├── file02.csv
│   └── file03.csv
└── 2018
   ├── file01.csv
   ├── file02.csv

然后您可以通过阅读所有内容

import dask.dataframe as dd
import pandas as pd

df = dd.read_csv("data/*/*.csv")
# convert to pandas via
df = df.compute()

答案 4 :(得分:0)

这是解决此问题的最佳方法:

import os
import glob
import pandas as pd


def nested_files_to_df(path,ext): 

    paths = []
    all_data = pd.DataFrame()

    #--- Putting all files name  in one list ---#

    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(tuple(ext)):
                s = os.path.join(root, file)
                paths.append(s)

    #--- Reading and merging all the  existing  excel files  into one  dataframe  ---#

    for f in paths:
        df = pd.read_excel(f)     
        all_data = all_data.append(df,ignore_index=True)

    return all_data

调用函数:

df= nested_files_to_df('Your main folder root',[".xls",".XLS",".xlsx"])