簡體   English   中英

使用文件名列將 CSV 連接到 dataframe

[英]Concatenating CSVs into dataframe with filename column

我正在嘗試將位於我父目錄的子文件夾中的多個 CSV 連接到一個數據框中,同時還添加一個新的文件名列。

/ParentDirectory
│  
│
├───SubFolder 1
│       test1.csv
│
├───SubFolder 2
│       test2.csv
│
├───SubFolder 3
│       test3.csv
│       test4.csv
│
├───SubFolder 4
│       test5.csv

我可以做這樣的事情來將所有 CSV 連接到一個數據框中

import pandas as pd
import glob

files = glob.glob('/ParentDirectory/**/*.csv', recursive=True)
df = pd.concat([pd.read_csv(fp) for fp in files], ignore_index=True)

但是有沒有辦法將每個文件的文件名作為一列添加到最終數據框,或者我是否必須在連接最終數據框之前先遍歷每個單獨的文件? Output 應如下所示:

   Col1  Col2    file_name
0  AAAA   XYZ    test1.csv
1  BBBB   XYZ    test1.csv
2  CCCC   RST    test1.csv
3  DDDD   XYZ    test2.csv
4  AAAA   WXY    test3.csv
5  CCCC   RST    test4.csv
6  DDDD   XTZ    test4.csv
7  AAAA   TTT    test4.csv
8  CCCC   RRR    test4.csv
9  AAAA   QQQ    test4.csv

您可以即時分配文件名:

from pathlib import Path

df = pd.concat([pd.read_csv(fp).assign(file_name=Path(fp).name)
                for fp in files], ignore_index=True)

其中 pathlib.Path 有助於從路徑中提取文件的基本名稱。

一個可能的解決方案(您可能需要用適合您操作系統的斜杠替換下面代碼中的/ ):

df = pd.concat([pd.read_csv(fp).assign(file_name=str.rsplit(
    fp, '/', 1)[-1]) for fp in files], ignore_index=True)

暫無
暫無

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

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