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

如何将pandas DataFrame按列值拆分为多个独立DataFrame

代码报错原因

你的代码无法运行有3个核心问题:

  • 语法层面不支持直接用f-string生成的字符串作为赋值变量名,f"{i}"=xxx 属于非法写法
  • 循环变量名大小写不一致:循环定义的是小写i,筛选条件里写的是大写I,会触发变量未定义的报错
  • 就算解决了前两个语法问题,直接动态生成上百个独立变量的写法可维护性极差,完全不适配100+城市的批量处理场景。
正确实现方案

不要动态生成零散的独立变量,用字典统一存储拆分后的所有子DataFrame是最稳妥的方案,字典的key为城市名,value为对应城市的子表,不管有多少个城市都可以自动适配,后续调用、遍历都很方便。
首先先修正你原始定义DataFrame的语法错误(Name字段行末尾漏了逗号),拆分代码如下:

import pandas as pd

df = pd.DataFrame({
  "City" :["Chennai","Banglore","Mumbai","Delhi","Chennai","Banglore","Mumbai","Delhi"],
  "Name" :["Praveen","Dhansekar","Naveen","Kumar","SelvaRani","Nithya","Suji","Konsy"],
  "Gender":["M","M","M","M","F","F","F","F"]
})

# 方式1:基础循环写法
city_dfs = {}
for city in sorted(df['City'].unique()):
    city_dfs[city] = df[df['City'] == city].reset_index(drop=True)

如果要取指定城市的子表,直接按键取值即可,比如获取Chennai的对应数据:
city_dfs['Chennai']

如果要批量遍历所有城市的子表做后续处理,直接循环字典即可:

for city_name, city_df in city_dfs.items():
    # 这里写每个子表的处理逻辑,比如打印、存文件等
    print(f"当前处理城市:{city_name},数据量:{len(city_df)}")

如果想写得更简洁,可以直接用pandas内置的groupby方法实现,效果和上面的循环完全一致:

# 方式2:groupby 字典推导式写法
city_dfs = {city: group.reset_index(drop=True) for city, group in df.groupby('City', sort=True)}

注意:不要尝试用globals()/locals()动态注入全局/局部变量的方式实现拆分,这种写法会污染命名空间,遇到城市名包含特殊字符、和Python内置变量/已有变量重名时,会触发非常难排查的bug,字典存储是这类批量拆分场景的通用标准方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:03:19