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

如何动态命名DataFrame?Python Pandas实现指导

按列拆分DataFrame并存储到字典中

问题背景

有如下结构的DataFrame(可通过以下代码还原):

import pandas as pd

s = {'BoP transfers': {1998: 12.346282212735618,
  1999: 19.06438060024298,
  2000: 18.24888031473687,
  2001: 24.860019912667006,
  2002: 32.38242225822908},
 'Current balance': {1998: -6.7953,
  1999: -2.9895,
  2000: -3.9694,
  2001: 1.1716,
  2002: 5.7433},
 'Domestic demand': {1998: 106.8610389799729,
  1999: 104.70302507466538,
  2000: 104.59254229534136,
  2001: 103.83532232336977,
  2002: 102.81709401489702},
 'Effective exchange rate': {1998: 88.134,
  1999: 95.6425,
  2000: 99.927725,
  2001: 101.92745,
  2002: 107.85565},
 'RoR (foreign liabilities)': {1998: 0.0433,
  1999: 0.0437,
  2000: 0.0542,
  2001: 0.0539,
  2002: 0.0474},
 'Gross foreign assets': {1998: 19.720897432405103,
  1999: 22.66200738564236,
  2000: 25.18270679890144,
  2001: 30.394226651732836,
  2002: 37.26477320359688},
 'Gross domestic income': {1998: 104.9037939043707,
  1999: 103.15361867816479,
  2000: 103.06777792080423,
  2001: 102.85886528974339,
  2002: 102.28518242008846},
 'Gross foreign liabilities': {1998: 60.59784839338306,
  1999: 61.03308220978983,
  2000: 64.01438055825233,
  2001: 67.07798172469921,
  2002: 70.16108592109364},
 'Inflation rate': {1998: 52.6613,
  1999: 19.3349,
  2000: 16.0798,
  2001: 15.076,
  2002: 17.236},
 'Credit': {1998: 0.20269913592846378,
  1999: 0.2154280880177353,
  2000: 0.282948948505006,
  2001: 0.3954812893893278,
  2002: 0.3578263032373988}}

df = pd.DataFrame.from_dict(s)

需求是按每3列拆分DataFrame,原本尝试动态命名df_1、df_2等变量,但代码无法运行:

dim = df.shape[1]

counter1 = 0
counter2 = 1

while(counter1 <= dim):
   df_str(counter2) = df.iloc[:, counter1: (counter1 + 3)]
   counter1 = counter1 + 3
   counter2 = counter2 + 1

已知动态命名变量不规范,需用字典实现,求具体方法。

解决方案:用字典存储拆分后的DataFrame

用字典保存拆分后的子DataFrame是更规范、易维护的做法,具体代码如下:

import pandas as pd

# 还原原始DataFrame
s = {'BoP transfers': {1998: 12.346282212735618,
  1999: 19.06438060024298,
  2000: 18.24888031473687,
  2001: 24.860019912667006,
  2002: 32.38242225822908},
 'Current balance': {1998: -6.7953,
  1999: -2.9895,
  2000: -3.9694,
  2001: 1.1716,
  2002: 5.7433},
 'Domestic demand': {1998: 106.8610389799729,
  1999: 104.70302507466538,
  2000: 104.59254229534136,
  2001: 103.83532232336977,
  2002: 102.81709401489702},
 'Effective exchange rate': {1998: 88.134,
  1999: 95.6425,
  2000: 99.927725,
  2001: 101.92745,
  2002: 107.85565},
 'RoR (foreign liabilities)': {1998: 0.0433,
  1999: 0.0437,
  2000: 0.0542,
  2001: 0.0539,
  2002: 0.0474},
 'Gross foreign assets': {1998: 19.720897432405103,
  1999: 22.66200738564236,
  2000: 25.18270679890144,
  2001: 30.394226651732836,
  2002: 37.26477320359688},
 'Gross domestic income': {1998: 104.9037939043707,
  1999: 103.15361867816479,
  2000: 103.06777792080423,
  2001: 102.85886528974339,
  2002: 102.28518242008846},
 'Gross foreign liabilities': {1998: 60.59784839338306,
  1999: 61.03308220978983,
  2000: 64.01438055825233,
  2001: 67.07798172469921,
  2002: 70.16108592109364},
 'Inflation rate': {1998: 52.6613,
  1999: 19.3349,
  2000: 16.0798,
  2001: 15.076,
  2002: 17.236},
 'Credit': {1998: 0.20269913592846378,
  1999: 0.2154280880177353,
  2000: 0.282948948505006,
  2001: 0.3954812893893278,
  2002: 0.3578263032373988}}

df = pd.DataFrame.from_dict(s)

# 初始化空字典存储拆分结果
df_dict = {}
# 设定每3列为一组
chunk_size = 3
total_cols = df.shape[1]

# 循环拆分并存储
for i in range(0, total_cols, chunk_size):
    group_num = (i // chunk_size) + 1
    df_dict[f'df_{group_num}'] = df.iloc[:, i:i+chunk_size]

# 示例:访问第一组子DataFrame
print(df_dict['df_1'])
# 示例:访问第二组子DataFrame
print(df_dict['df_2'])

代码说明

  • 用空字典df_dict统一管理所有拆分后的子DataFrame,避免动态变量的混乱
  • range(0, total_cols, chunk_size)生成每次截取的起始列索引,步长为3,确保按组拆分
  • 组号通过(i // chunk_size) + 1计算,保证从1开始编号,符合你原本的命名习惯
  • 通过df.iloc[:, i:i+chunk_size]截取对应列的子DataFrame,并存入字典

这种方法的优势:

  • 便于批量处理所有子DataFrame(比如循环遍历字典做统一操作)
  • 可以通过键名快速定位到目标子DataFrame
  • 代码结构清晰,后期维护成本低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:50:13