首页 > 解决方案 > 从起始行合并多个 csv

问题描述

我想知道我是否可以组合多个 CSV,但要从给定的行开始并在第一列添加文件的名称。目前,我一直在使用以下代码:

import os

import glob

import pandas as pd

os.chdir(Path)

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 ])
#export to csv
combined_csv.to_csv( "combined.csv", index=False, encoding='utf-8-sig')

现在我正在处理一些格式不正确的文件,我需要从第 3 行开始连接并在第一列添加文件的名称,但不知道如何做到这一点

标签: pythonpandas

解决方案


(首先,您不需要列表理解glob.glob- 它无论如何都会返回一个列表。)

对于您仅从第 3 行开始连接所有文件的请求 - 这应该相当简单。只需在.loc[3:]您的read_csv命令中添加一个:

combined_csv = pd.concat([pd.read_csv(f).loc[3:] for f in all_filenames ])

但是如果你想进行更多的修改,你应该使用一个普通的 for 循环,以一种可读的方式完成所有的事情,然后连接所有的东西,比如:

mydfs = []
for f in all_filenames:
    df = pd.read_csv(f).loc[3:]
    df['filename'] = f
    mydfs.append(df)

combined_csv = pd.concat(mydfs)

推荐阅读