2017-08-08 63 views
0

我真的很陌生,因此请耐心等待!如何遍历csv文件的文件夹

我的桌面上有一个文件夹,其中包含一些名为“文件1.csv”,“文件2.csv”等的csv文件。在每个文件中,都有一张如下所示的表:

Animal Level 
    Cat  1 
    Dog  2 
    Bird  3 
    Snake 4 

但是,每个文件在“动物”列中都有一些差异。我写了下面的代码,只有两个文件在同一时间进行比较,并返回匹配的动物:

def matchlist(file1, file2): 
    new_df = pd.DataFrame() 
    file_one = pd.read_csv(file1) 
    file_two = pd.read_csv(file2) 
    for i in file_one["Animal"]: 
     df_temp = file_two[file_two["Animal"] == i] 
     new_df = new_df.append(df_temp) 
     df_temp = pd.DataFrame() 
    return new_df 

但是,这一次只能比较两个文件。有没有一种方法可以遍历该单个文件夹中的所有文件,并返回与上述new_df相匹配的所有文件?

例如,new_df比较文件1和文件2.然后,我正在查找将new_df与文件3,文件4,文件5等进行比较的代码。

谢谢!

回答

0

林不知道如果真的是你想要的,我不能对你的问题尚未置评...还等什么:

这个函数返回,可以在所有CSV文件中找到动物数据框(可是非常小的),它使用的动物名作为关键字,所以电平值将不被视为

import pandas as pd 
import os, sys 

def matchlist_iter(folder_path): 

    # get list with filenames in folder and throw away all non ncsv 
    files = [file_path for file_path in os.listdir(folder_path) if file_path.endswith('.csv')] 

    # init return df with first csv 
    df = pd.read_csv(os.path.join(folder_path, files[0]),) 

    for file_path in files[1:]: 
     print('compare: {}'.format(file_path)) 
     df_other = pd.read_csv(os.path.join(folder_path, file_path)) 

     # only keep the animals that are in both frames 
     df = df_other[df['Animal'].isin(df_other['Animal'])] 

    return df 

if __name__ == '__main__': 
    matched = matchlist_iter(sys.argv[1]) 
    print(matched) 

我已经找到了一个类似的问题与有关比赛在这里更回答者:Compare Python Pandas DataFrames for matching rows

编辑:加入CSV和输出示例

CSV

Animal, Level 
Cat,  1 
Dog,  2 
Bird,  3 
Snake, 4 

CSV

Animal, Level 
Cat,  1 
Parrot, 2 
Bird,  3 
Horse, 4 

输出

compare: csv2.csv 
    Animal Level 
0 Cat  1 
2 Bird  3 
0

我构造的集合O f六个文件,其中只有第一列File 1.csvFile 6.csv是相同的。

为了便于比较,您只需要每个csv的第一列,因此我只安排从每个文件中提取这些列。

>>> import pandas as pd 
>>> from pathlib import Path 

>>> column_1 = pd.read_csv('File 1.csv', sep='\s+')['Animal'].tolist() 
>>> column_1 
['Cat', 'Dog', 'Bird', 'Snake'] 
>>> for filename in Path('.').glob('*.csv'): 
...  if filename.name == 'File 1.csv': 
...   continue 
...  next_column = pd.read_csv(filename.name, sep='\s+')['Animal'].tolist() 
...  if column_1 == next_column: 
...   print (filename.name) 
... 
File 6.csv 

正如预期的那样,File 6.csv是发现是相同的(在第一列)的唯一文件File 1.csv