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

循环中为DataFrame子集赋值时出现NaN异常求助

这个问题我遇到过!核心原因是pandas用DataFrame赋值时的列名对齐机制在搞鬼,咱们一步步拆解解决:

问题根源

你用iloc切片多列得到的是DataFrame对象,当把一个DataFrame赋值给另一个DataFrame时,pandas会优先按列名进行对齐,而不是你预期的位置匹配。你的源列(sm_col:sm_col+2)和目标列(orig_start_col:orig_start_col+2)列名完全不同,所以赋值后找不到匹配的列,自然全是NaN。

而你单独赋值第一列时,用的是iloc[:, col_idx]得到的是Series对象,Series只有行索引没有多列名的限制,赋值时只按行索引对齐,所以能正常生效。


解决方案1:直接用底层数值数组赋值(最直接)

绕过列名对齐,直接把源切片的数值数组赋值给目标位置:

for node_col in ('leg2_node', 'leg4_node'):
    combo = orig_combos.merge(all, how='inner', left_on='leg6_node', right_on=node_col)
    combo.reset_index(drop=True, inplace=True)
    orig_start_col = combo.columns.get_loc('leg6_alpha_x')
    sm_col = combo.columns.get_loc(node_col + '_y')
    # 关键:加.values获取二维数值数组,按位置赋值
    combo.iloc[:, orig_start_col:orig_start_col+2] = combo.iloc[:, sm_col:sm_col+2].values

解决方案2:用列名赋值(更直观,避免位置计算错误)

先拿到目标列和源列的名称,直接通过列名赋值(同样可以加.values跳过列名对齐):

for node_col in ('leg2_node', 'leg4_node'):
    combo = orig_combos.merge(all, how='inner', left_on='leg6_node', right_on=node_col)
    combo.reset_index(drop=True, inplace=True)
    orig_start_col = combo.columns.get_loc('leg6_alpha_x')
    sm_col = combo.columns.get_loc(node_col + '_y')
    
    # 获取列名
    target_cols = combo.columns[orig_start_col:orig_start_col+2]
    source_cols = combo.columns[sm_col:sm_col+2]
    
    # 赋值
    combo[target_cols] = combo[source_cols].values

解决方案3:逐列赋值(沿用你单列成功的逻辑)

既然单列赋值没问题,那就循环两列分别赋值:

for node_col in ('leg2_node', 'leg4_node'):
    combo = orig_combos.merge(all, how='inner', left_on='leg6_node', right_on=node_col)
    combo.reset_index(drop=True, inplace=True)
    orig_start_col = combo.columns.get_loc('leg6_alpha_x')
    sm_col = combo.columns.get_loc(node_col + '_y')
    
    # 逐列赋值
    for i in range(2):
        combo.iloc[:, orig_start_col + i] = combo.iloc[:, sm_col + i]

你可以试试打印combo.iloc[:,sm_col:sm_col+2].columns和combo.iloc[:,orig_start_col:orig_start_col+2].columns,就能看到两边列名完全不一样,这就是问题的根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:55:05