Python中如何获取列表内DataFrame对象的变量名
获取列表中DataFrame对应的变量名
在Python中,DataFrame对象本身不会记录指向它的变量名(一个对象可以被多个变量引用)。要获取列表中每个DataFrame对应的变量名,需要从当前命名空间反向查找,或者提前建立映射关系,以下是两种可行方案:
方案一:从命名空间反向查找
通过遍历全局或局部作用域的变量,匹配列表中的DataFrame对象,找到对应的变量名:
import pandas as pd # 示例DataFrame df_x = pd.DataFrame({'a': [1,2]}) df_y = pd.DataFrame({'b': [3,4]}) df_z = pd.DataFrame({'c': [5,6]}) sensors = [df_x, df_y, df_z] def get_df_names(df_list): # 遍历全局变量,筛选出目标DataFrame对应的变量名 global_vars = globals() # 先收集所有匹配的变量名与对象的映射 name_obj_map = {name: obj for name, obj in global_vars.items() if obj in df_list and not name.startswith('_')} # 按输入列表的顺序返回对应变量名 return [name for df in df_list for name, obj in name_obj_map.items() if obj is df] print(get_df_names(sensors)) # 输出: ['df_x', 'df_y', 'df_z']
注意事项
- 如果DataFrame是在函数内部定义的局部变量,将
globals()替换为locals()即可 - 若同一个DataFrame被多个变量引用,该方法会返回所有匹配的变量名
- 命名空间中以下划线开头的临时变量会被自动排除
方案二:提前用字典建立映射(推荐)
反向查找存在不确定性(比如变量名被覆盖、对象被多个变量引用),更可靠的方式是直接用字典存储变量名和DataFrame的映射关系:
# 直接用字典关联变量名和DataFrame sensors_dict = {'df_x': df_x, 'df_y': df_y, 'df_z': df_z} # 获取所有变量名 print(list(sensors_dict.keys())) # 输出: ['df_x', 'df_y', 'df_z'] # 获取指定变量对应的DataFrame print(sensors_dict['df_x'])
这种方式直观可控,避免了命名空间查找的潜在问题,优先推荐使用。
内容的提问来源于stack exchange,提问作者Pankaj Vidyarthi
相关产品推荐
相关产品推荐

