You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas eval中使用自定义函数并实现字符串拼接?

在pandas eval中实现自定义函数返回值与静态字符串的拼接

问题重现

简单场景下,pandas eval 可正常调用自定义函数:

import pandas as pd
from pandas import DataFrame

basic_df = DataFrame({"A":[1,2,3,4,5],"B":[20,40,60,100,90],
                               "C":["C1","C2","C3","C4","C5"],
                               })
def str_parse(element) -> str:
    return str(element)

print(basic_df.eval("@str_parse(A+B+100)"))

输出符合预期:

0    121
1    142
2    163
3    204
4    195
dtype: object

但直接拼接静态字符串时,结果异常:

print(basic_df.eval("@str_parse(A+B+100) + \"additional string\""))

错误输出:

0    121
1    142
2    163
3    204
4    195
dtype: int64additional string.

原因是pandas Series与字符串直接拼接时,会把字符串追加到整个Series的输出末尾,而非每个元素单独拼接。

解决方案(无需新增列)

方法1:在自定义函数内部完成拼接

修改函数支持传入后缀参数,在eval中直接调用:

def str_parse(element, suffix="") -> str:
    return str(element) + suffix

print(basic_df.eval("@str_parse(A+B+100, suffix='additional string')"))

正确输出:

0    121additional string
1    142additional string
2    163additional string
3    204additional string
4    195additional string
dtype: object

方法2:在eval中使用字符串格式化语法

无需自定义函数,直接用f-string语法完成拼接:

print(basic_df.eval("f'{A+B+100}additional string'"))

输出与方法1一致。

方法3:结合pandas字符串方法

通过astype(str)转换数值后再拼接:

print(basic_df.eval("(A+B+100).astype(str) + 'additional string'"))

同样实现每个元素单独拼接的效果。


内容的提问来源于stack exchange,提问作者Konstanty Maciej Lachowicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:22