如何遍历csv文件的文件夹
问题描述:
我真的很陌生,因此请耐心等待!如何遍历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等进行比较的代码。
谢谢!
答
林不知道如果真的是你想要的,我不能对你的问题尚未置评...还等什么:
这个函数返回,可以在所有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
答
我构造的集合O f六个文件,其中只有第一列File 1.csv
和File 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
。