我看过很多关于同一主题的帖子,但我的情况与其他人略有不同,所以我想要一些关于如何处理它的建议。现在我有很多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。