Python 合并csv文件时添加文件名作为标题
希望将所有csv合并到一个文件夹中。这正是我们想要的Python 合并csv文件时添加文件名作为标题,python,python-3.x,pandas,csv,Python,Python 3.x,Pandas,Csv,希望将所有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],
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)
但是,我想添加没有扩展名的文件名作为标题
File1.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)
创建了文件名不包括扩展名的标题列表。将列表传递给pd.concat函数中的keys参数。导入操作系统
作为pd进口熊猫
父目录='您的父目录\u路径'
ext='csv'
组合_csv=pd.DataFrame()
对于os.walk(parent_dir)中的root、dir和文件:
对于文件中的f:
path=os.path.join(根,f)
文件名,扩展名=os.path.splitext(f)
如果扩展==f'{ext}':
新建_df=pd.read_csv(路径)
cols=新的列
new_cols=[]
对于cols中的c:
new_cols.append(f'{filename}{c}')
新列=新列
合并的csv=pd.concat([合并的csv,新的df],轴=1)
组合到组合(“组合矩阵”,索引=False)
基本思想是,在将文件导出到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"]
现在,您的数据帧看起来像-它指示哪个列来自哪个文件
# file1.csv file1.csv file2.csv file2.csv
# 1 2 5 6
# 3 4 nan nan
您可以在导出之前将其导出到
combined.matrix.csv
那么combined\u csv.columns=all\u filename
呢?对于Python来说是新手,愿意学习;)。。。你的确切意思是什么?添加了一个带有解释的答案new_cols=new_cols.append(f'{filename}{c}')导致'NoneType'对象没有属性'append'。将其更改为新的_cols.append(f'{filename}{c}'),就像这里建议的那样,但是combined.csv有File1A、File1B、File2A、File2B作为headerMy抱歉,是的,list.append()
方法应该不返回任何值,这将导致问题。我更正了上面的答案。非常感谢。