如何在Python循环中按迭代器名称创建对应DataFrame?
解决Pandas循环生成对应命名DataFrame的问题
方法一:用字典存储(推荐)
用字典统一管理各指标的DataFrame,既避免变量覆盖,也方便后续批量操作:
import pandas as pd # 示例原始DataFrame original_df = pd.DataFrame({ 'ISO3': ['USA', 'CHN', 'JPN'], 'hdi_1990': [0.8, 0.6, 0.85], 'hdi_2020': [0.92, 0.76, 0.91], 'ihdi_1990': [0.75, 0.55, 0.8], 'ihdi_2020': [0.88, 0.7, 0.87], 'gnipc_1990': [20000, 3000, 25000], 'le_2020': [78, 76, 84] }) indicators = ['hdi','ihdi','gnipc','le'] # 初始化空字典存储结果 indicator_dfs = {} for ind in indicators: # 筛选ISO3列和当前指标的所有年度列 target_cols = ['ISO3'] + [col for col in original_df.columns if col.startswith(f"{ind}_")] # 将生成的DataFrame存入字典,键为指标名+_df indicator_dfs[f"{ind}_df"] = original_df[target_cols].copy() # 调用示例:获取hdi对应的DataFrame print(indicator_dfs['hdi_df'])
方法二:创建全局命名变量(不推荐)
如果一定要生成独立命名的变量(如hdi_df),可以用globals()函数直接在全局命名空间创建变量,但这种方式容易造成命名混乱,不建议在复杂项目中使用:
for ind in indicators: target_cols = ['ISO3'] + [col for col in original_df.columns if col.startswith(f"{ind}_")] # 直接创建对应名称的全局变量 globals()[f"{ind}_df"] = original_df[target_cols].copy() # 调用示例:直接使用变量名 print(hdi_df)
为什么推荐用字典?
- 避免全局命名空间被大量零散变量占用,代码更整洁
- 可通过循环遍历字典,轻松实现批量处理(比如统一保存所有指标的DataFrame到文件)
内容的提问来源于stack exchange,提问作者pedrorosado
相关产品推荐
相关产品推荐

