如何使用Python和Pandas将多个CSV文件合并为一个文件?

2024-09-27 07:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我看过很多关于同一主题的帖子,但我的情况与其他人有点不同,所以我想就如何处理这个问题提出一些建议。现在我有很多CSV文件,有许多不同的和额外的列,我想把它们都合并到一个主文件中

我已经创建了一个主CSV文件,其中包含我需要的所有列标题,该文件只有标题,没有任何数据

我想将其余的CSV文件合并到这个主CSV文件中,我将只接收主CSV文件中存在的带有标题的列(它们有我不需要的额外列)

例如,主文件有头1 2 3 4 5,而另一个csv文件有头2 3 4 5 6 7。我希望另一个csv文件的列2 3 4 5填充到主文件的列2 3 4 5的空白处,而不包括列6 7

    for entry in os.scandir(dir):
        if(entry.name.endswith(".csv")):
            print(dir+entry.name +" :\t Start")

这就是我用来读取CSV文件文件夹并将它们逐个与主文件合并的循环

if pd.Series(h0).isin(df.columns).all():
    master_file.merge(df, how='left')
    master_file.to_csv("D:\\Desktop\\Master File.csv", index=False) 

这是我正在使用的过滤步骤之一。h0是我希望包含的列标题列表。我已经在master_文件和df上调用了read_csv,所以它们现在都是数据帧,但是合并没有任何作用。我该怎么办?谢谢

编辑:谢谢你的建议和帮助!明天我会看所有的!再次感谢


Tags: 文件csv数据namemaster标题df主题
1条回答
网友
1楼 · 发布于 2024-09-27 07:29:49

您可以使用set操作符&;查找sub.csvmaster.csv的列名的交集;并使用pandas.concat组合两个数据帧,如下所示:

import pandas as pd
import glob
if __name__ == '__main__':
    master_df = pd.read_csv("data/master.csv")
    dfs = [master_df]
    for a_path in glob.iglob("data/csvs/*.csv", recursive=True):
        a_df = pd.read_csv(a_path)
        intersect_cols = set(a_df.columns.values) & set(master_df.columns.values)
        master_df = pd.concat([master_df, a_df[intersect_cols]], axis=0)
    print(master_df)

master.csv:

1,2,3,4,5

sub1.csv:

2,3,4,5,6,7
2,3,4,5,6,7
2,3,4,5,6,7

sub2.csv

2,3,4,5,6,7
7,6,5,4,3,2
7,6,5,4,3,2

结果:

     1  2  3  4  5
0  NaN  7  6  5  4
1  NaN  7  6  5  4
0  NaN  2  3  4  5
1  NaN  2  3  4  5

获得组合数据帧后,可以使用dataframe.to_csv将其保存到csv

相关问题 更多 >

    热门问题