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

如何用循环生成并命名含日期列的独立Pandas DataFrame?

解决方案:将子DataFrame关联到对应列名变量

你的问题出在循环里的赋值方式不对——你每次把切片后的DataFrame赋值给临时变量i,但这个变量只会在循环内临时存在,而且没有把这些子DataFrame和列名(比如Alle)绑定成可全局调用的变量,所以循环结束后自然找不到Alle这个名称。

下面给你两种可行的解决办法,优先推荐第一种:

方法1:用字典存储(推荐)

用字典来管理这些子DataFrame是最整洁、最安全的方式,不会污染命名空间,也方便后续批量操作:

# 初始化一个空字典
sub_dfs = {}

# 遍历所有数值列(排除'Datum')
for col_name in df.columns.drop('Datum'):
    # 把每个子DataFrame存入字典,键就是列名
    sub_dfs[col_name] = df[['Datum', col_name]]

# 调用示例:通过字典键访问对应的子DataFrame
sub_dfs['Alle'].info()
sub_dfs['B'].head()

这种方式的好处是:

  • 所有子DataFrame都集中在一个容器里,便于管理和遍历
  • 不用担心列名和现有变量重名导致的覆盖问题

方法2:直接创建独立变量(不推荐)

如果你确实需要把每个子DataFrame变成独立的全局变量,可以用globals()函数将变量名注入全局命名空间:

# 遍历数值列,创建对应名称的全局变量
for col_name in df.columns.drop('Datum'):
    globals()[col_name] = df[['Datum', col_name]]

# 现在可以直接调用
Alle.info()
B.describe()

⚠️ 注意:这种方式不推荐,原因如下:

  • 如果列名和你已有的变量重名,会直接覆盖原有变量,导致难以排查的bug
  • 变量太多时,会让你的命名空间变得混乱,不利于代码维护

为什么原来的代码不行?

再回头看你的原代码:

for i in df.columns:
    i = df[["Datum", i]]
    print(i)

这里的i是循环变量,每次循环都会被重新赋值:第一次i是'Datum',赋值后变成包含Datum和Datum的DataFrame;第二次i是'Alle',赋值后变成对应的子DataFrame,但循环结束后i只会保留最后一次循环的结果(也就是df[['Datum', 'X']]),而且从来没有把这些子DataFrame和列名绑定成独立变量,所以调用Alle时会提示未定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:32:49