我使用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
答案 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]