簡體   English   中英

如何使用 pandas 導入多個 csv 文件並連接成一個 DataFrame

[英]How to import multiple csv files and concatenate into one DataFrame using pandas

我有問題No objects to concatenate 我無法從主目錄及其子目錄中導入.csv 文件,以將它們連接成一個 DataFrame。 我正在使用 pandas。 舊答案對我沒有幫助,所以請不要標記為重復。

文件夾結構是這樣的

main/*.csv
main/name1/name1/*.csv
main/name1/name2/*.csv
main/name2/name1/*.csv
main/name3/*.csv
import pandas as pd
import os
import glob

folder_selected = 'C:/Users/jacob/Documents/csv_files'
  1. 不工作
frame = pd.concat(map(pd.read_csv, glob.iglob(os.path.join(folder_selected, "/*.csv"))))
  1. 不工作
csv_paths = glob.glob('*.csv')
dfs = [pd.read_csv(folder_selected) for folder_selected in csv_paths]
df = pd.concat(dfs)
  1. 不工作
            all_files = []
            
            all_files = glob.glob (folder_selected + "/*.csv")
            
            file_path = []
            for file in all_files:
                df = pd.read_csv(file, index_col=None, header=0)
                file_path.append(df)
                    
        frame = pd.concat(file_path, axis=0, ignore_index=False)

如下檢查 Dask 庫,它將許多文件讀取到一個 df

>>> import dask.dataframe as dd
>>> df = dd.read_csv('data*.csv')

閱讀他們的文檔https://examples.dask.org/dataframes/01-data-access.html#Read-CSV-files

您需要遞歸搜索子目錄。

folder = 'C:/Users/jacob/Documents/csv_files'
path = folder+"/**/*.csv"
  1. 使用glob.iglob
df = pd.concat(map(pd.read_csv, glob.iglob(path, recursive=True)))
  1. 使用glob.glob
csv_paths = glob.glob(path, recursive=True)
dfs = [pd.read_csv(csv_path) for csv_path in csv_paths]
df = pd.concat(dfs)
  1. 使用os.walk
file_paths = []
for base, dirs, files in os.walk(folder):
    for file in fnmatch.filter(files, '*.csv'):
        file_paths.append(os.path.join(base, file))
df = pd.concat([pd.read_csv(file) for file in file_paths])
  1. 使用pathlib
from pathlib import Path
files = Path(folder).rglob('*.csv')
df = pd.concat(map(pd.read_csv, files))

Python 的pathlib是完成此類任務的工具

from pathlib import Path

FOLDER_SELECTED = 'C:/Users/jacob/Documents/csv_files'

path = Path(FOLDER_SELECTED) / Path("main")

# grab all csvs in main and subfolders
df = pd.concat([pd.read_csv(f.name) for f in path.rglob("*.csv")])

筆記:

如果 CSV 需要預處理,您可以創建一個 read_csv function 來處理問題並將其放置在 pd.read_csv 的位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM