python - 使用列表中的值替换列中的值

标签 python pandas

这可能已经在堆栈中得到了回答,我只是不知道表达这个问题的最佳方式。但我试图遍历 DataFrame(数据)中包含不完整字符串的列(data["Id"]),并将它们替换为列表中的完整版本。

我无法通过仅用列表值重新分配列值来彻底进行切换,因为列中的值是随机排序的,并且它们连接到数据帧中重要的其他列值。

我尝试这样做:

for img_name in images_list:
    for label in data["Id"]:
        if label in img_name:
            data["Id"] = data["Id"].replace(label,img_name)

但是我的列表值和列值非常大(每个 120,000),因此此方法将永远花费时间。我想知道是否有人知道解决这个问题的更好方法?如果这个问题是多余的,我提前道歉,并且非常感谢能回答这个问题的链接。

列表示例:

["0img1_type1.png","1img1_type2.png","2img1_type3.png"]

数据[“Id”]示例:

["0img1","1img1","2img1"]

最佳答案

根据您的示例,您可以使用:

df = pd.DataFrame([["0img1","1img1","2img1"]]).T
df.columns = ['id']

l = ["0img1_type1.png","1img1_type2.png","2img1_type3.png"]
l = set(l)

df['id'] = df['id'].apply(lambda x: [i for i in l if x in i][0])
df

它基本上检索列表中与列值中的子字符串匹配的第一个值。为了更快地查找,最好将 list 转换为 set

关于python - 使用列表中的值替换列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001241/

相关文章:

python - Django URLField 不接受仅主机名的 URL

python - python中的{}和[]有什么区别?

python 3 |在 for 循环中使用多个 if 语句?

python - 删除 pandas 中所有值都相同的行

python - 根据值将一列中的数据拆分为单独的列

python-3.x - 使用 NAT(null) 将日期列从 Pandas 保存到 Parquet

python - 如何从 Pandas 数据框中的多列创建单个饼图

python - 在 Qt <= 5.12 中立即清除 `QGraphicsView`

python - 更改 pandas.DataFrame 的样式 : Permanently?

python - pybind11:将 c++ 类(具有现有的 python 绑定(bind))返回给 python