Python中如何通过变量动态命名DataFrame并完成赋值
问题原因
你当前循环写法不生效的核心原因是:for循环里的sopa_id只是临时遍历值,给这个临时变量赋值不会修改当前作用域的变量命名表,自然没法生成和字符串同名的独立变量。另外你原代码里pd.Dataframe()存在拼写错误,正确类名是pd.DataFrame(F大写)。
实现方法
方法1:直接生成对应名称的全局变量(不推荐)
如果你就是要得到cebola = db、batata = db的直接赋值效果,可以通过修改全局命名空间字典实现:
import pandas as pd db = pd.DataFrame() sopa = ['cebola', 'batata'] for sopa_id in sopa: globals()[sopa_id] = db
运行后直接输入cebola或者batata就能调用到db对应的DataFrame对象,完全匹配你要的赋值结果。
方法2:用字典统一管理映射(工程推荐写法)
动态生成零散的全局变量会大幅提升后续代码的维护成本,也不方便做批量遍历、校验操作,更规范的做法是用字典做键值映射,把列表字符串作为键,目标对象作为值存储:
import pandas as pd db = pd.DataFrame() sopa = ['cebola', 'batata'] sopa_map = {name: db for name in sopa} # 需要使用对应对象时,按键取值即可 cebola = sopa_map['cebola'] batata = sopa_map['batata']
注意:两种写法里所有名称默认指向的都是同一个db对象,如果你后续需要每个变量对应独立的DataFrame副本,把赋值部分改成
db.copy()即可,避免修改一个变量其余跟着联动的问题。
内容的提问来源于stack exchange,提问作者Magalhaez
相关产品推荐
相关产品推荐

