在Python中,如何在不均匀的列上迭代函数?
我知道这个问题可能没有多大意义,但希望下面的例子能够澄清这一点。我需要引用sentA列中的一个字符串,然后将其与sentB中的所有字符串进行比较。下面的示例显示了我定义为问题的数据框架 我当前使用的代码只能比较偶数列,如下所示:在Python中,如何在不均匀的列上迭代函数?,python,pandas,Python,Pandas,我知道这个问题可能没有多大意义,但希望下面的例子能够澄清这一点。我需要引用sentA列中的一个字符串,然后将其与sentB中的所有字符串进行比较。下面的示例显示了我定义为问题的数据框架 我当前使用的代码只能比较偶数列,如下所示: def compare(row): sentA = row[0] return pd.Series([simalarity_funct(sentA, sentB) for sentB in questions['sentB']]) results =
def compare(row):
sentA = row[0]
return pd.Series([simalarity_funct(sentA, sentB) for sentB in questions['sentB']])
results = questions.apply(compare, axis=1).T
该代码为str1A提供了与str1B、str2B和str3B相似的3个输出,并将它们放在一列中
下面是另一个基于输入df编号的简化代码示例:
num1 num2
3 5
4 6
7
def multiply(num1, num2):
return num1*num2
def compare(row):
num1 = row[0]
# I would like to prevent this next statement from passing an "NaN" to the
# multiply function. The empty cells will always be at the end of the column.
return pd.Series([multiply(num1, num2) for num2 in numbers['num2']])
results = numbers.apply(compare, axis=1).T
print(results)
15 20 NaN
18 24 NaN
21 28 NaN
潜在的问题是,如果向相似性函数提供了坏数据,它将抛出一个错误。我能想到的解决这个问题的最简单方法是不向它提供坏数据。有没有办法修改最后一步,防止它将NaN传递给相似度函数 尝试提供一个可以完全运行的示例,而不是单独的摘录。我将尝试使用另一个函数来说明这一点。要定义我正在使用的函数,需要几个大型库和几十行代码。我会更新的。@Gabriel我试着用一个可行的例子来澄清。呜呜!这起作用了。希望它不会增加我的计算时间。对于200x200输入数据帧,这件事需要6小时才能运行。@r我想你需要优化你的代码200*200不是一个大数据集。我希望我知道我能做得更好。这是WordNet的一个实现。我认为最大的问题是它必须重新处理每个交互中的字符串。它正在对照字典什么的检查它们。
def compare(row):
num1 = row[0]
pd.Series([multiply(num1, num2) for num2 in numbers[numbers.num2.notnull()].num2 ])
numbers[numbers.num1.notnull()].apply(compare, axis=1).T
def compare(row):
num1 = row[0]
pd.Series([multiply(num1, num2) for num2 in numbers[numbers.num2.notnull()].num2 ])
numbers[numbers.num1.notnull()].apply(compare, axis=1).T