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

如何将pandas dataframe处理函数的字符串列表转为可调用对象执行

你之前使用的classthing封装方案仅对字符串做了对象包裹,没有绑定实际的函数逻辑,无法直接调用执行处理。可参考以下方案实现需求:

方案1:手动维护函数映射表(最安全,推荐)

提前把允许调用的处理函数和对应的字符串名称做映射,仅放行合法函数,避免代码注入风险,适配所有运行场景。

import pandas as pd

# 1. 定义你的所有处理函数,建议统一返回处理后的DataFrame,避免inplace修改的隐性问题
def func2(df):
    df = df.copy() # 可选配置:加这行可以避免修改原始DataFrame
    df['ID_NUM'] = 'A' + df['TAIL'].str[-9:]
    return df

def func4(df):
    df = df.copy()
    # 补充你的func4处理逻辑
    return df

def func5(df):
    df = df.copy()
    # 补充你的func5处理逻辑
    return df

# 2. 你的字符串格式函数列表
func_list = ['func2', 'func4', 'func5']

# 3. 建立合法函数映射表
func_mapping = {
    'func2': func2,
    'func4': func4,
    'func5': func5
}

# 4. 把字符串列表转为可调用对象列表,同时过滤非法函数名
callable_funcs = [func_mapping[name] for name in func_list if name in func_mapping]

# 5. 批量处理DataFrame
df = pd.read_csv("你要处理的文件路径.csv")
for func in callable_funcs:
    df = func(df)

方案2:通过全局命名空间获取(仅推荐函数名来源可信的场景)

如果你的函数都是全局定义的,且函数列表来源完全可控,不需要手动维护映射表,可以直接从globals()中获取对应函数:

callable_funcs = []
for func_name in func_list:
    # 校验目标名称存在且是可调用对象
    if func_name in globals() and callable(globals()[func_name]):
        callable_funcs.append(globals()[func_name])

# 后续批量处理逻辑和方案1一致
df = pd.read_csv("你要处理的文件路径.csv")
for func in callable_funcs:
    df = func(df)

注意:该方案存在代码注入风险,禁止在函数名由用户自由输入的场景使用

内容的提问来源于stack exchange,提问作者Kyle Quigley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:03