Python 3.11:如何用DataFrame列值替换描述模板变量?
解决方案
这里有几种实用方法可以实现将DataFrame列值填充到描述模板的需求:
方法1:逐行替换模板变量(直观易读)
利用apply()逐行遍历DataFrame,结合字符串replace()方法替换模板中的<name>和<age>:
import pandas as pd data = {'name' : ['Max','Jim'],'Age':[32,44],'desc':''} df = pd.DataFrame(data) desc_template = "My name is <name> and my age is <age>." # 逐行替换变量 df['desc'] = df.apply( lambda row: desc_template.replace('<name>', row['name']).replace('<age>', str(row['Age'])), axis=1 ) print(df)
方法2:利用格式化字符串的关键字参数(更简洁)
将模板中的尖括号改为大括号(匹配列名),直接用行数据的字典格式传入format():
import pandas as pd data = {'name' : ['Max','Jim'],'Age':[32,44],'desc':''} df = pd.DataFrame(data) # 修改模板为关键字格式,或先转换原模板 desc_template = "My name is {name} and my age is {Age}." df['desc'] = df.apply(lambda row: desc_template.format(**row), axis=1) print(df)
如果不想修改原模板的
<name>和<age>,可以先转换模板格式:original_template = "My name is <name> and my age is <age>." desc_template = original_template.replace('<', '{').replace('>', '}') df['desc'] = df.apply(lambda row: desc_template.format(**row), axis=1)
方法3:向量化字符串拼接(高效处理大数据集)
避免逐行循环,直接用Pandas的向量化字符串操作拼接内容,效率更高:
import pandas as pd data = {'name' : ['Max','Jim'],'Age':[32,44],'desc':''} df = pd.DataFrame(data) df['desc'] = "My name is " + df['name'] + " and my age is " + df['Age'].astype(str) + "." print(df)
关于正则和np.where的问题说明
np.where()主要用于条件分支赋值,不适合这种逐行变量替换场景,强行使用会增加复杂度。- 正则替换是可行的,但需要逐行处理并正确转换数据类型(比如将
Age转为字符串),示例代码如下:
import re import pandas as pd def fill_desc(row): template = "My name is <name> and my age is <age>." template = re.sub(r'<name>', row['name'], template) template = re.sub(r'<age>', str(row['Age']), template) return template df['desc'] = df.apply(fill_desc, axis=1)
内容的提问来源于stack exchange,提问作者Rushabh Nalawade
相关产品推荐
相关产品推荐

