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

Python如何遍历DataFrame的每一行以修改列值?

解决DataFrame赋值与NaN填充问题

一、高效生成HV列(别用iterrows)

iterrows效率低还容易踩坑,直接用字典映射+map方法搞定,比遍历快太多:

  1. 先从你的球队HV值文件里把对应关系转成字典,比如用csv读取的话:
    import pandas as pd
    # 读取文件并转成{球队名: HV值}的字典
    hv_map = pd.read_csv('球队HV值文件.csv').set_index('HomeTeam')['HV'].to_dict()
    # 要是手动测试的话,直接写示例字典也行
    hv_map = {'Burnley':50, 'Crystal Palace':65}
    
  2. 一行代码给整个DataFrame加HV列:
    df['HV'] = df['HomeTeam'].map(hv_map)
    
    所有行的HV值直接对应上,根本不用逐行遍历。

二、处理其他列的NaN值

根据列的类型选合适的填充方式:

  • 数值列:填充均值或者中位数
    # 给所有数值列的NaN填均值
    num_cols = df.select_dtypes(include=['int64', 'float64']).columns
    df[num_cols] = df[num_cols].fillna(df[num_cols].mean())
    # 单独给某列填中位数
    df['射门数'] = df['射门数'].fillna(df['射门数'].median())
    
  • 分类/文本列:填充众数或者固定默认值
    # 填出现次数最多的那个值
    df['主裁判'] = df['主裁判'].fillna(df['主裁判'].mode()[0])
    # 填固定默认值
    df['天气'] = df['天气'].fillna('晴')
    
  • 特殊条件填充:比如根据其他列的值来填
    # 示例:当HomeTeam是Burnley时,把某列的NaN填成0
    df.loc[df['HomeTeam'] == 'Burnley', '某列'] = df.loc[df['HomeTeam'] == 'Burnley', '某列'].fillna(0)
    

三、真要遍历的话(不推荐)

如果特殊逻辑必须逐行处理,别直接改iterrows返回的行(那是副本),用df.loc修改原DataFrame:

for idx, row in df.iterrows():
    if row['HomeTeam'] == 'Burnley':
        df.loc[idx, 'HV'] = 50
    elif row['HomeTeam'] == 'Crystal Palace':
        df.loc[idx, 'HV'] = 65
    # 处理NaN
    if pd.isna(row['某列']):
        df.loc[idx, '某列'] = '默认填充值'

但这种方法数据量大的时候会巨慢,能不用就不用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:54:53