簡體   English   中英

在合並 csv 文件時將文件名添加為 header

[英]Add filename as header while merging csv files

想要將所有 csv 合並到一個文件夾中。 這按預期工作。

import os
import glob
import pandas as pd

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames], axis = 1)
#export to csv
combined_csv.to_csv( "combined.matrix", index=False)

但是,我想將不帶擴展名的文件名添加為 header。

文件1.csv

A,B
1,2
3,4

文件2.csv

A,B
5,6

組合矩陣

File1,File1,File2,File2
A,B,A,B
1,2,5,6
3,4,,

試試下面的代碼:

import pandas as pd

all_filenames = ['File1.csv','File2.csv']
headers = []
for i in all_filenames:
    headers.append(i.replace('.csv', ''))

combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames], keys=headers, axis = 1)

創建了一個 header 列表,文件名不包括擴展名。 將列表傳遞給 pd.concat function 中的 keys 參數。

import os import pandas as pd parent_dir = 'YOUR_PARENT_DIRECTORY_PATH' ext = 'csv' combined_csv = pd.DataFrame() for root, dir, files in os.walk(parent_dir): for f in files: path = os.path.join(root, f) filename, extension = os.path.splitext(f) if extension == f'.{ext}': new_df = pd.read_csv(path) cols = new_df.columns new_cols = [] for c in cols: new_cols.append(f'{filename}{c}') new_df.columns = new_cols combined_csv = pd.concat([combined_csv, new_df], axis=1) combined_csv.to_csv( "combined.matrix", index=False)

基本思想是您可以在DataFrame本身的某處包含文件名(在這種情況下,我將其包含在列名中,您也可以將它們包含在一行中),因為無論如何您都將其導出到 csv 以進一步加工

all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
# This takes the value ["file1.csv", "file2.csv"]

#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames], axis = 1)
# This looks like
# A B A B
# 1 2 5 6
# 3 4 nan nan

由於列名是固定的(A 和 B) - 而且您對文件名更感興趣,您可以使用

combined_csv.columns = sorted(all_filenames * len(combined_csv.columns) / len(all_filenames))
# This evaluates to sorted(["file1.csv", "file2.csv"] * 4 / 2) which is equal to ["file1.csv", "file1.csv", "file2.csv", "file2.csv"]

現在你的 dataframe 看起來像 - 這表明哪一列來自哪個文件

# file1.csv file1.csv file2.csv file2.csv
# 1 2 5 6
# 3 4 nan nan

您可以將其導出到combined.matrix.csv

暫無
暫無

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

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