我对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等进行比较的代码。
谢谢!
答案 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.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
相同(在第一列中)的文件。