首页 > 解决方案 > 如何调用熊猫数据框应用函数返回两个变量

问题描述

我想调用 pandas 数据框apply()函数来返回两个变量

举些例子:

print(word_list)
['abc', 'lmn', ]

def is_related_content(x):
    for y in word_list:
        if y in x:
            return x, y
    return '', ''

print(df.head())
    str1        
    abcdef      
    hijklmn     
    asddada    
    
# call apply() function like this
df['string'], df['substring'] = df['str1'].apply(lambda x: is_related_content(x))

# it should be like this
print(df.head())
    str1        string      substring
    abcdef      abcdef      abc
    hijklmn     hijklmn     lmn
    asddada     None        None               

但我收到如下错误消息:

news_df['merge_' + col], news_df[col] = news_df['content'].fillna("").apply(lambda x: is_related_content(x))
ValueError: too many values to unpack (expected 2)

有人可以帮我吗?
提前致谢。

标签: pythonpandasdataframe

解决方案


您需要一个 Series 元组才能使解包语法起作用。但是apply方法返回的是一系列元组。您可以.str在之后使用访问器apply将结果解压缩为元组:

更新:

s = df['str1'].apply(lambda x: is_related_content(x))
df['string'], df['substring'] = s.str[0], s.str[1]
df
#      str1   string substring
#0   abcdef   abcdef       abc
#1  hijklmn  hijklmn       lmn
#2  asddada                   

df['string'], df['substring'] = df['str1'].apply(lambda x: is_related_content(x)).str

df
#      str1   string substring
#0   abcdef   abcdef       abc
#1  hijklmn  hijklmn       lmn
#2  asddada                   

推荐阅读