如何在Python Pandas中使用变量作为replace函数的替换值
替换DataFrame中body列的图片URL为baseUrl+id+.webp格式
需求很明确:把DataFrame里body列中包含的图片URL,替换成https://f.com/加上对应行的id值再加上.webp的格式,比如把"https:\/\/www.f.it\/media\/catalog\/product\/2\/4\/240297_1.jpg?..."改成"https:\/\/f.com\/982951473.webp"。
你原来的代码里,直接用df.replace没法实现每行对应自己的id值替换,因为var是一个Series,但replace的value参数不能直接这样关联每行的变量。正确的做法是用str.replace结合apply或者lambda函数,让每行替换时引用自己的id:
import pandas as pd df = pd.DataFrame({ 'id': ["982951473","000590051"], 'body': [ "<script type=\"application/ld+json\">{\"image\":\"https:\/\/www.f.it\/media\/catalog\/product\/2\/4\/240297_1.jpg?optimize=medium&fit=bounds&height=265&width=265&canvas=265:265\",\"sku\":\"982951473\"}</script>", "<script type=\"application/ld+json\">{\"image\":\"https:\/\/www.f.it\/media\/catalog\/product\/0\/0\/000590051_rinazina_spray.jpg?optimize=medium&fit=bounds&height=265&width=265&canvas=265:265\",\"sku\":\"000590051\"}</script>" ] }) # 遍历每行替换对应的图片URL df['body'] = df.apply( lambda row: row['body'].replace( # 匹配image字段里的旧URL部分 r'https:\/\/www.f.it\/.*?(?=",)', f'https:\/\/f.com\/{row["id"]}.webp', regex=True ), axis=1 ) print(df.to_string())
代码说明:
- 用
df.apply(axis=1)遍历每一行,这样就能拿到当前行的id值 - 正则表达式
r'https:\/\/www.f.it\/.*?(?=",)':匹配从https://www.f.it/开始,直到遇到",(也就是image字段结束的位置)的所有内容,确保只替换图片URL部分 - 替换后的内容直接用当前行的
id拼接成目标URL
运行后输出的body列内容就会变成:
<script type="application/ld+json">{"image":"https:\/\/f.com\/982951473.webp","sku":"982951473"}</script> <script type="application/ld+json">{"image":"https:\/\/f.com\/000590051.webp","sku":"000590051"}</script>
完全符合你的需求。
内容的提问来源于stack exchange,提问作者Ax_
相关产品推荐
相关产品推荐

