[英]How to combine multiple csvs using Python and include filename as entry in column?
[英]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.