在Python中,如何在不均匀的列上迭代函数?

在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 =

我知道这个问题可能没有多大意义,但希望下面的例子能够澄清这一点。我需要引用sentA列中的一个字符串,然后将其与sentB中的所有字符串进行比较。下面的示例显示了我定义为问题的数据框架

我当前使用的代码只能比较偶数列,如下所示:

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