【问题标题】:How can I combine multiple CSV files into one with Python and Pandas?如何使用 Python 和 Pandas 将多个 CSV 文件合并为一个?
【发布时间】:2021-02-25 06:06:50
【问题描述】:

我看过很多关于同一主题的帖子,但我的情况与其他人有点不同,所以我想就如何处理它提出一些建议。现在我有很多 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_file 和 df 上调用了 read_csv 所以它们现在都是数据帧,但是合并什么都不做。我应该怎么办?谢谢!

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

【问题讨论】:

标签: python pandas csv


【解决方案1】:

您可以使用集合运算符 & 找到 sub.csv 的列名与 master.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。

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 2018-06-11
    • 2014-05-17
    • 1970-01-01
    • 2019-10-11
    • 2016-04-18
    • 2015-03-09
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多