如何遍历csv文件的文件夹

时间:2017-08-08 17:48:39

标签: python-3.x pandas csv dataframe iteration

我对python真的很陌生,所以请耐心等待我!

我的桌面上有一些文件夹,其中包含一些名为&#34的文件;文件1.csv","文件2.csv"等等。在每个文件中,都有一个表格如下:

    Animal   Level
    Cat      1
    Dog      2
    Bird     3
    Snake    4

但是每个文件在" Animal"中都有一些差异。柱。我编写了以下代码,一次仅比较两个文件并返回匹配的动物:

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等进行比较的代码。

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我构建了一组六个文件,其中只有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相同(在第一列中)的文件。