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

如何用Python循环实现CSV中符合条件的surp值相减并修复pandas报错

问题修复方案

报错根因&存在的问题列表

  • 直接报错原因:筛选条件首项写了df['surp'],该列是浮点数值,无法和后续布尔类型的条件做&运算,导致类型错误。
  • 逻辑错误1:prime_type筛选用了&(且)运算,不可能存在prime_type同时等于两个不同值的行,需改为|(或)运算,或更简洁的isin()方法。
  • 逻辑错误2:循环内直接全列赋值sub_prime_language,每次循环都会覆盖整列数据,无法对应存储每个i的计算结果。
  • 语法错误:df.['sub_prime_language']多写了多余的.,不符合pandas列索引语法。
  • 取值错误:pr_nl.loc['surp']是行索引取值逻辑,你需要的是取surp列的数值,应改为列索引取值。

修复后代码

import pandas as pd

df = pd.read_csv("surprisal.primed_extracted.csv")
# 先初始化结果列
df['sub_prime_language'] = None

for i in range(60):
    # 筛选荷兰语组的surp值
    pr_nl_surp = df.loc[
        (df['prime_type'].isin(['nl_unamb', 'nl_amb']))
        & (df['target_nr'] == i)
        & (df['prime_nr'] == i),
        'surp'
    ]
    # 筛选英语组的surp值
    pr_en_surp = df.loc[
        (df['prime_type'].isin(['en_unamb', 'en_amb']))
        & (df['target_nr'] == i)
        & (df['prime_nr'] == i),
        'surp'
    ]
    # 确认匹配到唯一值再做运算,避免索引错误
    if len(pr_nl_surp) == 1 and len(pr_en_surp) == 1:
        diff = pr_nl_surp.iloc[0] - pr_en_surp.iloc[0]
        # 赋值给对应行
        df.loc[
            (df['target_nr'] == i) & (df['prime_nr'] == i),
            'sub_prime_language'
        ] = diff

# 可按需导出结果文件
df.to_csv("surprisal_with_diff.csv", index=False)

补充说明

如果你的target_nr和prime_nr列是字符串类型,把条件里的== i改成== str(i)即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:36:03