提取多个列表中的公共元素
extract common elements in several lists
一般来说,我想做的是在几个csv文件中提取"word"的共享栏中的公共元素。 (2008.csv, 2009.csv, 2010.csv .... 2015.csv)
所有文件的格式相同:'word','count'
'word' 包含特定年份在一个文档中出现的所有常用词。
这是其中一个文件的快照:
只要 8 个文件中有两个具有共同元素,我想知道那些共享元素以及它们在哪个文件中。(这很像 tfidf 计算...顺便说一句)
无论如何,我的目标是了解这些文件中频繁出现的单词的一些趋势。
(据我所知,一个元素最多可以存在于五个文件中。)
我想知道单词第一次出现的时间,也就是说,一个单词在文件 C 中,但不在文件 B 和 A 中。
我知道 for + if 可以解决这里的问题,但它很乏味,我需要比较 8 列中的 2 列、8 列中的 3 列、8 列中的 4 列,在那种情况下,找到共享元素。
这是我到目前为止编写的代码...与我需要的相差甚远...我只是比较 8 个文件中的两个文件中的元素:
code
有人能帮忙吗?
使用集合intersection
可能会有帮助
for i in range(len(year_list)):
datai=set(pd.read_csv('filename_'+year_list[i]+'.csv')['word'])
tocompare=[]
for j in range(i+1,len(year_list)):
dataj=set(pd.read_csv('filename_'+year_list[j]+'.csv')['word'])
print "Two files:",i,j
print datai.intersection(dataj)
tocompare.append(dataj)
print "All compare:"
print datai.intersection(*tocompare)
break
第一个答案总体来说效果很好。但是由于某种原因,交集函数并没有 return 我预期的确切结果。所以我修改了提供的代码,以提高打印输出的准确性和格式。
for i in range(0,8):
otheryears = []
if i>0:
for y in range(0,i):
datay = set(pd.read_csv("most_50_common_words_"+year_list[y]+'.csv')["word"])
for y in list(datay):
if y not in otheryears:
otheryears.append(y)
uniquei = []
datai = set(pd.read_csv("most_50_common_words_"+year_list[i]+'.csv')["word"])
print "\nCompare year %d with:\n" % int(year_list[i])
for j in range(i+1,8):
dataj = set(pd.read_csv("most_50_common_words_"+year_list[j]+'.csv')['word'])
print year_list[j],':'
listj = list(datai.intersection(dataj))
print list(datai.intersection(dataj)),'\n',"%d common words with year %d" % (len(datai.intersection(dataj)),int(year_list[j]))
for j in list(dataj):
if j not in otheryears:
otheryears.append(j)
common = []
for x in list(datai):
if x in otheryears:
common.append(x)
print "\nAll compare:"
print "%d year has %d words in common with other years. They are as follows:\n%s" % (int(year_list[i]),
len(common),common),'\n'
for x in list(datai):
if x not in otheryears:
uniquei.append(x)
print "%d Frequent words unique in year %d:\n%s \n" % (len(uniquei),int(year_list[i]),uniquei)
一般来说,我想做的是在几个csv文件中提取"word"的共享栏中的公共元素。 (2008.csv, 2009.csv, 2010.csv .... 2015.csv)
所有文件的格式相同:'word','count'
'word' 包含特定年份在一个文档中出现的所有常用词。
这是其中一个文件的快照:
只要 8 个文件中有两个具有共同元素,我想知道那些共享元素以及它们在哪个文件中。(这很像 tfidf 计算...顺便说一句)
无论如何,我的目标是了解这些文件中频繁出现的单词的一些趋势。 (据我所知,一个元素最多可以存在于五个文件中。)
我想知道单词第一次出现的时间,也就是说,一个单词在文件 C 中,但不在文件 B 和 A 中。
我知道 for + if 可以解决这里的问题,但它很乏味,我需要比较 8 列中的 2 列、8 列中的 3 列、8 列中的 4 列,在那种情况下,找到共享元素。
这是我到目前为止编写的代码...与我需要的相差甚远...我只是比较 8 个文件中的两个文件中的元素: code
有人能帮忙吗?
使用集合intersection
可能会有帮助
for i in range(len(year_list)):
datai=set(pd.read_csv('filename_'+year_list[i]+'.csv')['word'])
tocompare=[]
for j in range(i+1,len(year_list)):
dataj=set(pd.read_csv('filename_'+year_list[j]+'.csv')['word'])
print "Two files:",i,j
print datai.intersection(dataj)
tocompare.append(dataj)
print "All compare:"
print datai.intersection(*tocompare)
break
第一个答案总体来说效果很好。但是由于某种原因,交集函数并没有 return 我预期的确切结果。所以我修改了提供的代码,以提高打印输出的准确性和格式。
for i in range(0,8):
otheryears = []
if i>0:
for y in range(0,i):
datay = set(pd.read_csv("most_50_common_words_"+year_list[y]+'.csv')["word"])
for y in list(datay):
if y not in otheryears:
otheryears.append(y)
uniquei = []
datai = set(pd.read_csv("most_50_common_words_"+year_list[i]+'.csv')["word"])
print "\nCompare year %d with:\n" % int(year_list[i])
for j in range(i+1,8):
dataj = set(pd.read_csv("most_50_common_words_"+year_list[j]+'.csv')['word'])
print year_list[j],':'
listj = list(datai.intersection(dataj))
print list(datai.intersection(dataj)),'\n',"%d common words with year %d" % (len(datai.intersection(dataj)),int(year_list[j]))
for j in list(dataj):
if j not in otheryears:
otheryears.append(j)
common = []
for x in list(datai):
if x in otheryears:
common.append(x)
print "\nAll compare:"
print "%d year has %d words in common with other years. They are as follows:\n%s" % (int(year_list[i]),
len(common),common),'\n'
for x in list(datai):
if x not in otheryears:
uniquei.append(x)
print "%d Frequent words unique in year %d:\n%s \n" % (len(uniquei),int(year_list[i]),uniquei)