首页 > 解决方案 > 用列表标记数据框列

问题描述

我有一个数据框列text

text
'a red apple'
'the apple is sweet'
'a yellow banana'
'a green melon'

我想term通过将其与列表匹配来创建另一列['apple', 'banana, melon']

for term in the_list:
    df['term'] = bf['text'].apply(lambda x: term if term in x else 'None')

我得到的结果

text                 term  
'a red apple'        None
'the apple is sweet' None
'a yellow banana'    None
'a green melon'      melon

但是,我希望它是

text                 term  
'a red apple'        apple
'the apple is sweet' apple
'a yellow banana'    banana
'a green melon'      melon

我觉得这可能是因为我使用了一个列表,但我不知道如何在 lambda 本身中创建一个循环

标签: pythonpandas

解决方案


仅当字符串始终相同时,使用 split 方法才有效。你必须像这样切换循环和 lambda 表达式

df = pd.DataFrame(['a red apple',
'a banana yellow ',
'a green melon'], columns=['text'])

the_list = ['apple', 'banana',  'melon']

def fruit_finder(string):
    term_return = 'None'
    for term in the_list:
        if term in string:
            term_return = term
    return term_return

df['term'] = df['text'].apply(fruit_finder)

print(df)

将从列表中返回匹配的值

并将导致输出

               text    term
0       a red apple   apple
1  a banana yellow   banana
2     a green melon   melon

编辑:您的初始程序不起作用的原因是您的循环和 lambda 混淆了。您正在遍历这些术语并仅将该术语应用于数据帧(即您最后一次执行循环只是检查术语 melon 所以香蕉和苹果没有出现)


推荐阅读