代码之家  ›  专栏  ›  技术社区  ›  ASH

有什么方法可以找到多个CSV头之间的多个文件名之间的交集吗?

  •  0
  • ASH  · 技术社区  · 6 年前

    我正在尝试循环浏览文件夹中的所有CSV文件,并查找所有文件中的所有头文件名。我想代码会这样开始…它需要治疗和增强,当然。

    import glob
    import pandas as pd
    
    csvs = glob.glob('C:\\my_path\' + '*.csv')
    
    master_set = set()
    
    for file in csvs:
        this_df = pd.read_csv(file)
        cols = set(this_df.columns)
        master_set = master_set.intersection(cols)
    
    print(master_set)
    

    显然,这只是在文件夹中循环文件。我要做的是比较一个文件夹中的所有CSV头,检查所有头的匹配(交集),并打印结果。有道理吗?希望如此。我需要在某个时候合并所有这些文件。我正在尝试确定将所有公共头集合在一起的最佳方法。这是整个数据系列的最低公分母。

    所以,如果我有4个文件使用这个模式:

    colA colB colC colD colE
    

    colA colC colE colX colX
    

    那么,这就是我想看到的:

    colA colC colE
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   mayosten    6 年前

    你似乎想:

    1. 识别.csv文件
    2. 抓住标题

    glob 是最好的。

    import glob
    
    csvs = glob.glob('PATH_TO_CSV_DIR' + '*.csv')
    

    然后,我将创建一个主集,您可以将每个新.csv的标题与之进行比较:

    import pandas as pd
    
    master_set = set()
    
    for file in csvs:
        this_df = pd.read_csv(file)
        cols = set(this_df.columns)
        master_set = master_set.intersection(cols)
    

        2
  •  2
  •   Pavan Kumar Polavarapu    6 年前

    是的,您可以这样做,但需要在文件列表上循环并存储结果。作为一个示例,下面是代码。

    import pandas as pd
    df1 = pd.read_csv("File1.csv")
    df2 = pd.read_csv("File2.csv")
    setA = set(df1.columns)
    setB = set(df2.columns)
    common = setA.intersection(setB)
    
        3
  •  0
  •   santobedi    5 年前

    我用下面的方法解决了这个问题。该代码适用于任意数量的CSV文件。

    import pandas as pd
    import csv
    import glob
    
    path = r'PATH_TO_CSV_DIR' # use your path
    all_files = glob.glob(path + "/*.csv")
    df1 = pd.read_csv('PATH_TO_CSV_DIR/c15.csv') # to initialize the master_set
    master_set = set(df1.columns)
    
    for file in all_files:
        this_df = pd.read_csv(file)
        cols = set(this_df.columns)
        master_set = master_set.intersection(cols)
    
    w = csv.writer(open("CommonColumns.csv","w")) #it gives a CSV file of common header. The common header can be used later for other operations. 
    w.writerow(master_set)
    print(master_set)