使用df列每一行中的字符串长度作为函数中的参数

时间:2018-10-02 05:19:46

标签: python pandas

我对此有一些严重的麻烦!假设我有一个如下所示的熊猫数据框:

Name    LeftString    RightString
nameA   AATCGCTGCG    TGCTGCTGCTT
nameB   GTCGTGBAGB    BTGHTAGCGTB
nameC   ABCTHJKLAA    BFTCHHFCTSH
....

我有一个函数,将以下内容作为参数:

def localAlign(minAlignment, names, string1, string2):
    # do something great

在我的函数中,minAlignment是一个整数,名称,string1和string2是该函数用作列表对象的数据框列。

然后我稍后再调用该函数:

left1_2_compare = localAlign(12, df['Name'], df['LeftString'], df['RightString'])

我的函数运行没有问题,但是12作为硬编码值或sys参数传入,但我宁愿它是一个变量,该变量的长度为df ['LeftString ']。

因此,我对此进行的尝试是传递将返回int到函数参数的计算:

left1_2_compare = localAlign((int(len(df['LeftString'])*0.6)), 
                             df['Name'], df['LeftString'],
                             df['RightString'])

有趣的部分是代码不会失败或返回错误,它不会为该值输出任何内容(该部分的输出文件为空白)。其余的数据很好。

我们看到在调用函数之前已经定义了df,是否有一种方法可以将row1 ... rown中的字符串长度用作函数的输入整数,而无需在函数内部定义它?

1 个答案:

答案 0 :(得分:2)

需要由len创建的序列,需要mul进行倍数转换,并需要astype转换为整数:

left1_2_compare = localAlign((df['LeftString'].str.len().mul(.6)).astype(int), 
                             df['Name'], 
                             df['LeftString'], 
                             df['RightString'])