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

如何通过f-string调用列表索引生成pandas多语言月份编号列

问题根因

代码里f"month_{language}"的执行结果只是普通文本字符串(比如传入参数en时得到的是字符串"month_en"),并不是你提前定义好的对应语言月份列表,对字符串直接调用.index()方法完全无法匹配到月份值,自然运行报错。

修正方案

不要定义多个独立的月份列表变量,改用字典做「语言标识-对应月份列表」的映射即可,不需要写任何if条件分支,后续新增支持语言时,只需要往字典里追加一组键值对就行,可维护性远高于动态拼接变量名的写法。

修正后的可运行代码如下:

import pandas as pd

dic_events = {'month':['January', 'February'], 'url':['www.abc.com', 'www.def.com']}
df_events = pd.DataFrame(dic_events)

def add_month_index(df, language):
    # 多语言月份配置集合
    month_config = {
        "en": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        "de": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
    }
    target_month_list = month_config[language]
    # 批量为DataFrame生成月份索引列
    df['month_id'] = df['month'].apply(lambda m: target_month_list.index(m) + 1)
    return df

# 调用示例
result_df = add_month_index(df_events, 'en')
补充说明
  • 如果你坚持要用动态拼接变量名的方式(不推荐,容易出现变量名冲突、取值异常问题),可以通过locals()[f"month_{language}"]获取当前作用域下对应名称的变量,但这种写法不符合代码规范,仅做了解即可。
  • 上述修正后的函数直接对整个DataFrame做批量处理,不需要逐行传入单个月份参数,更符合pandas的常规使用逻辑,执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:01:58