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

如何将字符串类型列名变量传入pandas自定义函数解决属性报错

问题根因

报错的核心原因是函数内的写法错误:dataframe.column_name是固定访问DataFrame中名称**字面量为column_name**的列,不会解析你传入的column_name参数存储的字符串值。你调用函数时虽然传了'CITY'作为列名参数,但代码根本没有使用这个参数值检索对应列,自然会触发找不到属性的错误。
你之前尝试改用方括号索引没解决问题,大概率是只修改了函数外的调用代码,没有替换函数内部的属性访问写法。
另外原代码里用dict作为变量名是不好的习惯,会覆盖Python内置的字典类型,容易埋下隐性bug。

正确实现

函数内部访问动态列名必须使用方括号索引语法,把存储列名的参数传入索引位,同时可以简化序号生成的逻辑:

def make_dict(dataframe, column_name):
    keys = dataframe[column_name].unique()
    keys.sort()
    # 用enumerate直接遍历拿到序号和对应取值,无需单独生成值列表
    col_map = {key: idx for idx, key in enumerate(keys)}
    return col_map

调用方式和你之前写的完全一致,直接传入DataFrame和列名字符串即可:

city_dict = make_dict(df, 'CITY')

这个实现和你最初单写STATE列映射的逻辑完全对齐:先取列的唯一值、排序后按顺序映射从0开始的连续整数。

补充:如果不需要强制对唯一值做排序,pandas自带的pd.factorize也可以快速完成列取值到整数的映射,但如果需要保持你原有排序后编号的逻辑,上面的自定义函数是最贴合需求的写法。

内容的提问来源于stack exchange,提问作者Sharp Thwey Thit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:31:04