如何用循环生成并命名含日期列的独立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
相关产品推荐
相关产品推荐

