python - 用列表标记数据框列
问题描述
我有一个数据框列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 本身中创建一个循环
解决方案
仅当字符串始终相同时,使用 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 所以香蕉和苹果没有出现)
推荐阅读
- google-bigquery - 需要在 Java 中传递 Struct 参数的 Bigquery Array
- json - XML 转 JSON | 弹簧靴 | 杰克逊
- symfony - 从数据库加载 Symfony (5.2) 配置
- c# - 如何使用具有多个属性级别的包含从 thenInclude 获取特定列
- c++ - 如何启用从一类到另一类的转换?
- node.js - NPM安装问题无法下载win32-x64-83_binding.node
- c++ - 如何在 C++ 中计算日出和日落?
- labview - Mavlink 与 LabView 的整合
- python - Python 和 C 结构之间的大小不匹配,默认结构对齐/填充
- sql - Rank() 基于列条目,而数据按日期排序