在 python 相交后我得到一个空列表
I getting an empty lists after intersect in python
我有 2 列,每列有 5 个单词。
例如:
x=[狗|猫|老鼠|新|世界]
y=[鱼|猫|新|东西|不错]
我需要找到它们之间的交集 [cat|new]。
但它向我显示了一个空列表。你知道为什么吗?
data = pd.read_csv('data.csv')
intersect1=[]
for j in range(len(data)):
#print('==========================================================================')
x=str(data.iloc[:, 2]).split("|")
y=str(data.iloc[:, 3]).split("|")
#get_jaccard_sim(x, y)
#intersect.append(result)
intersect= list(set(x) & set(y))
intersect1.append(intersect)
#print(inter)
print(intersect1)
我刚刚使用以下代码进行了测试:
data1 = "dog|cat|mouse|new|world"
data2 = "fish|cat|new|thing|nice"
x = data1.split("|")
y = data2.split("|")
intersect= list(set(x) & set(y))
print(intersect)
这会输出 ['cat', 'new']
,这正是您所期望的。请注意 x
和 y
是包含单词作为单独字符串的数组,即:
['dog', 'cat', 'mouse', 'new', 'world'] # this is x
['fish', 'cat', 'new', 'thing', 'nice'] # this is y
确保您的代码也是如此!
问题出在您的迭代循环中,当您只想 select 逐行 select 每个值时,当您执行 data.iloc[:,2]
时,您正在 select 整列。更改 :
以在循环中使用计数器,j
.
df = pd.DataFrame({'x': ['dog|cat|mouse|new|world'],
'y': ['fish|cat|new|thing|nice']})
for j in range(len(df)):
x=str(df.iloc[j, 0]).split("|")
y=str(df.iloc[j, 1]).split("|")
intersect= list(set(x) & set(y))
print(intersect)
输出:
['new', 'cat']
即使您在循环中添加了代码,您实际上并没有遍历数据框。假设您的数据是这种形状:
one two
0 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
1 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
2 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
3 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
4 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
5 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
6 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
7 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
8 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
...
然后假设您感兴趣的列是 2 和 3,这样修改就可以了:
for j in range(len(data)):
x = data.iloc[j, 2][0].split('|')
y = data.iloc[j, 3][0].split('|')
intersect = list(set(x) & set(y))
我有 2 列,每列有 5 个单词。
例如:
x=[狗|猫|老鼠|新|世界]
y=[鱼|猫|新|东西|不错]
我需要找到它们之间的交集 [cat|new]。
但它向我显示了一个空列表。你知道为什么吗?
data = pd.read_csv('data.csv')
intersect1=[]
for j in range(len(data)):
#print('==========================================================================')
x=str(data.iloc[:, 2]).split("|")
y=str(data.iloc[:, 3]).split("|")
#get_jaccard_sim(x, y)
#intersect.append(result)
intersect= list(set(x) & set(y))
intersect1.append(intersect)
#print(inter)
print(intersect1)
我刚刚使用以下代码进行了测试:
data1 = "dog|cat|mouse|new|world"
data2 = "fish|cat|new|thing|nice"
x = data1.split("|")
y = data2.split("|")
intersect= list(set(x) & set(y))
print(intersect)
这会输出 ['cat', 'new']
,这正是您所期望的。请注意 x
和 y
是包含单词作为单独字符串的数组,即:
['dog', 'cat', 'mouse', 'new', 'world'] # this is x
['fish', 'cat', 'new', 'thing', 'nice'] # this is y
确保您的代码也是如此!
问题出在您的迭代循环中,当您只想 select 逐行 select 每个值时,当您执行 data.iloc[:,2]
时,您正在 select 整列。更改 :
以在循环中使用计数器,j
.
df = pd.DataFrame({'x': ['dog|cat|mouse|new|world'],
'y': ['fish|cat|new|thing|nice']})
for j in range(len(df)):
x=str(df.iloc[j, 0]).split("|")
y=str(df.iloc[j, 1]).split("|")
intersect= list(set(x) & set(y))
print(intersect)
输出:
['new', 'cat']
即使您在循环中添加了代码,您实际上并没有遍历数据框。假设您的数据是这种形状:
one two
0 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
1 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
2 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
3 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
4 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
5 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
6 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
7 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
8 [dog|cat|mouse|new|world] [fish|cat|new|thing|nice]
...
然后假设您感兴趣的列是 2 和 3,这样修改就可以了:
for j in range(len(data)):
x = data.iloc[j, 2][0].split('|')
y = data.iloc[j, 3][0].split('|')
intersect = list(set(x) & set(y))