在两个打印中匹配相同的单词

时间:2016-08-03 13:33:20

标签: python csv pandas

我使用os列出目录中的文件名。我也在使用pandas列出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

2 个答案:

答案 0 :(得分:2)

而不是

for file in dirs:
    print file

建立一个清单:

files = [file for file in dirs]

然后使用DataFrame检查:

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

答案 1 :(得分:1)

据我所知,你有两个清单。一个来自目录,另一个来自Pandas中的一列。您需要两个列表中的元素以及每个列表唯一的元素。让我们说你的清单是这样的:

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]