【发布时间】:2020-03-17 18:41:04
【问题描述】:
我正在尝试将数据框列中的文本与现有列表进行比较,然后根据比较更新数据框中的新列。数据框列中的文本比列表中的更复杂。如果数据框文本包含列表中的文本,我希望获取列表值并更新新的数据框列。我为此尝试了一个 for 循环,但我收到一个错误,即我的迭代器不是整数。以下是定义和我的代码。
myDF 是数据框 产品是我要评估的列 makelist 是我想比较 myDF.Product 的字符串列表 如果匹配,我想更新 myDF.Brand。
当我运行以下命令时,我收到一条错误消息,指出我正在使用无效的变量类型进行索引。
import pandas as pd
myDF = pd.DataFrame({"Location": 'S1 S1 S1 S1 S1'.split(),
"Product": '12AB 34CD 56EF 78GH 90IJ'. split(),
"Brand": ""})
makelist = ['12A', '4CD', '56', '78G', '90IJ']
for items in myDF.Product:
for makes in makelist:
if makelist[makes] in(myDF.Product.iloc[items]):
myDF.Brand[items]=makelist[makes]
#expected output
Location Product Brand
0 S1 12AB 12A
1 S1 34CD 4CD
2 S1 56EF 56
3 S1 78GH 78G
4 S1 90IJ 90IJ
【问题讨论】:
-
myDF['Brand'] = myDF.loc[myDF['Product'].isin(makelist), 'Product']? -
你能显示这个数据框的预期输出吗?
-
预期输出是什么?
-
您得到的错误是由
makelist[makes]中的索引引起的,因为您尝试使用字符串而不是(数字)索引访问列表。同样,您不能使用myDF.Product.iloc[items]中的非整数键按位置索引进行索引 -
@FBruzzesi,这是否意味着我需要使用 '.index' 来按我的意图进行迭代?我不明白的是,当我分别运行 for 循环时,它们都可以正常工作。
标签: pandas list dataframe text string-comparison