如何实现Pandas DataFrame列值的逐行字符串格式化拼接
问题根因
你写的这行代码根本没法逐行生成结果,核心问题是直接拿整列的Series对象套f-string。f-string执行的时候是在赋值的瞬间,直接把三个列的整个内容转成大段字符串嵌到模板里,根本不会一行一行匹配取值,最后拼出来的是一整坨包含所有列原始内容的长文本,完全不是你要的逐行短句。
能跑出正确结果的写法
1. 逐行遍历拼接(逻辑最直白,小数据用着方便)
指定按行维度遍历,每拿到一行的字段值,就往模板里嵌:
df['string'] = df.apply( lambda row: f"{row['qty']} {row['things']} on the {row['place']}", axis=1 )
这里的
axis=1别漏,意思是按行循环,每次拿到的row就是当前行的所有字段值,从里面取对应字段拼字符串就不会错。
2. 矢量化拼接(数据量大的时候跑着更快)
Pandas本身支持列之间直接做字符串运算,是内置的矢量化实现,不用手动逐行循环,速度比上面的apply方法快好几倍:
# 提醒下qty是数字类型,得先转成字符串才能拼,不然会直接报错 df['string'] = ( df['qty'].astype(str) + " " + df['things'] + " on the " + df['place'] )
两种写法跑出来的结果和你预期的表结构完全一致。
踩坑提醒
- 别再写“直接对整列字段套f-string”的代码了,这是pandas刚上手最容易踩的坑,本质是转字符串,不是逐行匹配
- 要是表有几万行以上,别用apply逐行循环,直接用矢量化拼接的写法,省时间
内容的提问来源于stack exchange,提问作者Harpreet Singh
相关产品推荐
相关产品推荐

