2016-08-03 78 views
2

我使用os列出目录中的文件名。我也使用熊猫来列出CSV文件中一列的内容。我已经打印了两者的结果,现在我想匹配出现在两个打印件中的名称,并确定哪些名称对一个打印件是独占的。以下是我的代码,它可以获取CSV文件的名称和内容。在两张照片中匹配相同的单词

import os, sys 
import pandas as pd 


path = "/mydir/csvfile" 
dirs = os.listdir(path) 

for file in dirs: 
    print file 

fields = ['Column'] 

df = pd.read_csv('/mydir/csv_file', skipinitialspace=True, usecols=fields) 

print df.Column 

*编辑*

我想出了这个解决方案,它的工作原理。

import os, sys 
import pandas as pd 


path = "/mdir/csvfile" 
dirs = os.listdir(path) 

list_1 = [file for file in dirs] 



fields = ['column'] 

df =  pd.read_csv('/mydir/csvfile', skipinitialspace=True, usecols=fields) 

list_2 = df.column.values.tolist() 

list_3=[] 


for i in list_1: 
    if i in list_2: 
     list_3.append(i + " True") 
    else: 
     list_3.append(i + " False") 

print list_3 
+0

意识到我忘了真的有问题。我将如何去做这件事,有没有办法比较和匹配两个打印? –

+0

不打印,将这些值保存到变量并比较这些变量。 –

回答

2

而不是

for file in dirs: 
    print file 

建立清单:

files = [file for file in dirs] 

然后使用数据帧进行检查:

df.Column.isin(files) # this will check elementwise 
Out: 
0 True 
1 True 
2 True 
3 True 
Name: Column, dtype: bool 

或者

df.Column.isin(files).all() # if all of them are the same 
Out: True 
+0

这工作,谢谢! –

+0

不客气。请注意,如果'files'有额外的文件,这可能会丢失。您可以通过其他方式进行比较:'pd.Series(files).isin(df.Column)'来确保。 – ayhan

+0

你知道我怎么能得到这个工作,仍然给予元素与真或假?例如0 12fhaj True,1 757dyah False,2 fhjf8282 True ... –

1

所以据我了解,你有两个列表。一个来自目录,另一个来自熊猫的专栏。您需要两个列表中的元素以及每个列表唯一的元素。比方说你的列表是这样的:

List1 = ['a' , 'b' , 'c' , 'd', 'e', 'f'] 
List2 = ['c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i'] 

然后你的代码产生什么样的我想你想可以使用列表理解和这样的:

overlap = [i for i in List1 if i in List2] 
nonOverlapList1 = [j for j in List1 if j not in overlap] 
nonOverlapList2 = [k for k in List2 if k not in overlap] 
相关问题