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

Python如何使用变量作为对象属性名实现动态属性访问

问题描述

我尝试运行如下代码:

def find_unknown_val(field, value, unknown_val):
    temp_df = get_frame(field, value)
    return temp_df.iloc[0].str(unknown_val)

print(find_unknown_val('Member_Name','McCarron,John','Supervisor_Name'))

运行后抛出错误:TypeError: 'StringMethods' object is not callable,但使用硬编码属性名的代码时可正常运行:

def find_unknown_val(field, value, unknown_val):
    temp_df = get_frame(field, value)
    return temp_df.iloc[0].Supervisor_Name

需要实现传入变量作为对象属性名,动态访问对应属性值的效果。

错误原因

.str是pandas Series提供的字符串处理方法集合入口,本身是StringMethods类型的实例,不是用来按名称取列值的接口,不能作为函数调用传入列名,因此触发类型错误。

实现方案

两种写法都可以实现动态按变量名取值的需求:

  • 优先使用pandas原生方括号索引,这是官方推荐的动态取列方式,兼容性最强,不会受列名特殊字符、重名问题影响:
def find_unknown_val(field, value, unknown_val):
    temp_df = get_frame(field, value)
    return temp_df.iloc[0][unknown_val]
  • 如果要走原生属性访问逻辑,可以用Python内置getattr函数动态获取属性:
def find_unknown_val(field, value, unknown_val):
    temp_df = get_frame(field, value)
    return getattr(temp_df.iloc[0], unknown_val)

提示:如果列名包含空格、运算符,或者和Series/Index的内置属性、方法重名,getattr写法会出现异常,日常用pandas处理数据优先选方括号索引的写法。

内容的提问来源于stack exchange,提问作者Zack Paquette

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:36:26