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

如何从DataFrame同一行获取多值以创建宝可梦对象

优化方案

1. 提取整行数据减少重复调用

先一次性获取目标行的所有数据,再从中提取字段,避免重复调用sets.loc[setindex, ...],代码更简洁:

sets = pd.read_excel("SetsSheet.xlsx", index_col=0, header=0)

def fromset(setindex):
    row = sets.loc[setindex]
    # 假设行索引就是宝可梦名称,对应BattlePokemon的name参数
    name = row.name
    type1 = row["type 1"]
    type2 = row["type 2"]
    hp = row["hp"]
    # 批量提取所有move列生成learnset,后续新增move列也无需修改代码
    learnset = row.filter(like="move").tolist()
    return BattlePokemon(name, type1, type2, hp, learnset)

2. 用字典解包简化参数传递

如果能让BattlePokemon的参数名和DataFrame列名对齐(比如重命名列),可以直接把行数据转成字典后解包,大幅减少手动赋值代码:

sets = pd.read_excel("SetsSheet.xlsx", index_col=0, header=0)
# 重命名列名,和类参数名匹配
sets = sets.rename(columns={
    "type 1": "type1",
    "type 2": "type2",
    "move 1": "move1",
    "move 2": "move2"
})

def fromset(setindex):
    row_dict = sets.loc[setindex].to_dict()
    name = row_dict.pop("name") if "name" in row_dict else row.name
    learnset = [row_dict.pop("move1"), row_dict.pop("move2")]
    # 用**解包剩余参数
    return BattlePokemon(name, learnset=learnset, **row_dict)

3. 额外优化:处理空值场景

如果部分宝可梦没有第二属性或多余技能,可以在提取时设置默认值,避免空值报错:

def fromset(setindex):
    row = sets.loc[setindex]
    name = row.name
    type1 = row["type 1"]
    type2 = row.get("type 2", None)  # 无第二属性时返回None
    hp = row["hp"]
    # 过滤空值,只保留有效技能
    learnset = [move for move in row.filter(like="move").tolist() if pd.notna(move)]
    return BattlePokemon(name, type1, type2, hp, learnset)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:34