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



我看过很多关于同一主题的帖子,但我的情况与其他人略有不同,所以我想要一些关于如何处理它的建议。现在我有很多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,所以它们现在都是数据帧,但合并没有任何作用。我该怎么办?谢谢!

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

您可以使用set运算符找到sub.csv的列名与master.csv的交集,并使用pandas.concat组合两个pandas数据帧,如下所示:

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)

硕士.csv:

1,2,3,4,5

子1.csv:

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

子2.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。

相关内容

  • 没有找到相关文章

最新更新