如何通过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
相关产品推荐
相关产品推荐

