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

循环创建按月过滤的DataFrame报错:SyntaxError: can't assign to function call

解决用f-string命名DataFrame的语法错误

错误原因

你试图用f-string直接作为变量名赋值(比如f"df_{year_month}" = 过滤后的DataFrame),这在Python中是非法的——赋值语句的左侧必须是合法变量名,而f-string是表达式/函数调用,因此触发SyntaxError: can't assign to function call。

正确实现方式

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

用字典映射年月标识与对应DataFrame,既安全又便于后续操作:

import pandas as pd

# 假设原始数据df包含'month'列,格式为'YYYY-MM'
df = pd.DataFrame(
    {'month': pd.date_range('2022-01', '2023-12', freq='M').strftime('%Y-%m'),
     'value': range(24)}
)

monthly_dfs = {}

# 遍历2022-2023所有月份
for year in [2022, 2023]:
    for month in range(1, 13):
        year_month = f"{year}-{month:02d}"
        # 过滤对应月份数据并存入字典
        monthly_dfs[year_month] = df[df['month'] == year_month]

# 合并所有月度DataFrame用于报表
merged_df = pd.concat(monthly_dfs.values(), ignore_index=True)

方法2:动态创建全局变量(不推荐)

若需生成独立变量名,可借助globals()字典,但这种方式易引发变量冲突,不利于维护:

for year in [2022, 2023]:
    for month in range(1, 13):
        year_month = f"{year}-{month:02d}"
        var_name = f"df_{year_month.replace('-', '_')}"
        globals()[var_name] = df[df['month'] == year_month]

# 可直接调用df_2022_01、df_2022_02等变量

注意事项

优先使用字典存储:字典能清晰管理所有月度数据,遍历、修改、合并操作更便捷;动态创建变量会降低代码可读性,增加排查难度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:11