导入多个嵌套的csv文件并连接到一个DataFrame中

问题描述 投票:0回答:5

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

enter image description here

enter image description here

python pandas csv dataframe concatenation
5个回答
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])

4
投票

您可以使用glob.glob('*.csv')查找所有csvs然后将它们全部连接起来。

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
投票

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

我不相信有一种方法可以将上述所有方法结合起来以方便您使用。


1
投票

Frenzy Kiwi给了你正确的答案。另一种方法是使用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()

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"])
© www.soinside.com 2019 - 2024. All rights reserved.