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

Python循环批量命名变量:DataFrame按月度拆分列数据需求

解决方案

你的方法存在的问题

  • 方法1:Python不允许直接用字符串表达式作为变量名赋值(比如str(i)+str(j)+'_col2'=...是语法错误),而且你将j转为字符串后,j*100会变成字符串重复(例如'01'*100),完全无法正确截取100行数据。
  • 方法2:列表操作逻辑混乱,年份循环的结果没有用到变量命名中,且仅生成了12个元素,完全没有对应24个数据块的需求,也未处理列拆分。

推荐方案:用字典存储拆分结果(更易管理)

直接创建大量全局变量容易引发命名冲突,用字典存储更合理,键为你需要的变量名,值为拆分后的Series:

import pandas as pd

# 示例DataFrame,替换为你的实际数据
df = pd.DataFrame(pd.np.random.rand(2400, 9))

# 初始化存储字典
split_vars = {}

# 遍历两年(24个数据块对应24个月)
for year in [2018, 2019]:
    for month in range(1, 13):
        # 计算当前数据块的起始/结束行索引
        block_num = (year - 2018) * 12 + (month - 1)
        start = block_num * 100
        end = start + 100
        
        # 遍历每一列生成对应变量
        for col_idx in df.columns:
            # 生成变量名:年份+两位月份+_colX
            var_name = f"{year}{month:02d}_col{col_idx + 1}"
            # 存储拆分后的列数据
            split_vars[var_name] = df.iloc[start:end, col_idx]

# 调用示例:获取2018年1月的第2列数据
print(split_vars['201801_col2'])

直接创建全局变量的方案(不推荐但满足需求)

如果一定要生成独立的全局变量,可以通过globals()字典实现:

import pandas as pd

df = pd.DataFrame(pd.np.random.rand(2400, 9))

for year in [2018, 2019]:
    for month in range(1, 13):
        block_num = (year - 2018) * 12 + (month - 1)
        start = block_num * 100
        end = start + 100
        
        for col_idx in df.columns:
            var_name = f"{year}{month:02d}_col{col_idx + 1}"
            # 直接创建全局变量
            globals()[var_name] = df.iloc[start:end, col_idx]

# 直接调用变量
print(201801_col2)

关键说明

  • 年份范围:示例用2018、2019两年对应24个数据块,可根据你的实际年份调整。
  • 列名适配:如果你的DataFrame列已经命名为col1-col9,直接将col_idx +1改为col_idx即可。
  • 行索引计算:每个数据块严格对应100行,确保start和end的计算准确。

内容的提问来源于stack exchange,提问作者Sergio Dom.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:43:19