如何修改代码实现按参数化名称创建过滤后的DataFrame?
解决方法
方法1:动态创建命名变量(不推荐,易污染全局命名空间)
你原代码里的df_{i} = ...属于语法错误,Python不支持这种直接拼接变量名的写法。要实现动态生成df_a、df_b这类变量,可以借助globals()字典操作全局命名空间:
for i in ['a', 'b']: globals()[f'df_{i}'] = df[df['name'] == i]
执行后就能直接调用df_a和df_b,效果和你预期完全一致。
方法2:用字典存储过滤结果(更推荐,便于管理)
如果不想生成过多零散变量,建议将过滤后的DataFrame存入字典,以name值为键,这种方式更易维护,也不会污染命名空间:
# 常规循环写法 df_dict = {} for i in ['a', 'b']: df_dict[i] = df[df['name'] == i] # 调用过滤后的数据集 print(df_dict['a']) # 对应预期的df_a print(df_dict['b']) # 对应预期的df_b
也可以用字典推导式简化代码:
df_dict = {i: df[df['name'] == i] for i in ['a', 'b']}
额外优化:自动获取所有唯一name值
如果name字段的取值不止'a'和'b',可以直接从原DataFrame中提取所有唯一值,无需手动枚举:
unique_names = df['name'].unique() df_dict = {name: df[df['name'] == name] for name in unique_names}
内容的提问来源于stack exchange,提问作者Fernando Quintino
相关产品推荐
相关产品推荐

