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

使用Pandas assign方法时,f-string作列名报错:keyword can't be an expression

Pandas用assign动态指定列名的解决办法

常规加列操作

平时给DataFrame添加固定名称的新列,用assign可以这么写:

import pandas as pd

df_so = pd.DataFrame.from_dict({0: 'jane',
 1: 'baz',
 2: 'baz',
 3: 'dave',
 4: 'dave',
 5: 'dave'},orient='index',columns=["name"])

# 添加名为val的列,值全为bar
df_so.assign(val="bar")

执行后得到的结果:

indexnameval
0janebar
1bazbar
2bazbar
3davebar
4davebar
5davebar

碰到的问题

但如果想动态生成列名,比如用f-string拼出来,直接写会报错:

an_other = "another"
# 这么写会触发语法错误
df_so.assign(f"{an_other}_val"="bar")

# 错误提示:SyntaxError: keyword can't be an expression

这是因为Python不允许把表达式直接当关键字参数名用。

解决办法

用字典解包就能搞定,把动态列名和对应值放进字典,再用**把字典拆成assign的参数:

方式一:直接传解包后的字典

an_other = "another"
df_so.assign(**{f"{an_other}_val": "bar"})

方式二:先定义字典再传入(适合多列场景)

如果要加多个动态列,先把列名和值整理进字典更清晰:

an_other = "another"
new_columns = {
    f"{an_other}_val": "bar",
    f"{an_other}_count": 3
}
df_so.assign(**new_columns)

这样就能顺利生成another_val这类动态名称的列,还能继续用assign方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:20:33