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

如何处理Pandas DataFrame中的NA值?附待优化代码

Pandas代码修改:处理NA值并按列独立生成输出

原代码存在两个问题:一是无法处理输入中的NA值,二是逻辑错误——仅依据Delivery Time zone overlap列的值就给所有三组输出列赋值,不符合"每个输入列对应三个输出列"的需求。以下是修正后的代码,同时满足NA值处理要求:

测试数据(含NA值)

import pandas as pd
import numpy as np

# 构造带NA值的输入DataFrame
delivery_df = pd.DataFrame({
    'Delivery Time zone overlap': [3, np.nan, 11.5, 3, 0, 9.5],
    'Developer & Product Time zone overlap': [np.nan, 3, 11.5, 3, 0, 9.5],
    'Developer & Agile champion Time zone overlap': [3, 3, np.nan, 3, 0, 9.5]
})

修正后的代码

def process_overlap_column(col_name, df):
    """处理单个输入列,生成对应的三个输出列"""
    col_values = df[col_name]
    base_name = col_name.replace(' Time zone overlap', '')
    
    # 初始化三个输出列,默认设为NA
    colocation_col = f'{base_name} colocation'
    overlap_col = f'{base_name} overlap'
    opposite_col = f'{base_name} opposite timezone'
    
    # 创建结果字典
    result = pd.DataFrame({
        colocation_col: np.nan,
        overlap_col: np.nan,
        opposite_col: np.nan
    }, index=df.index)
    
    # 处理非NA值的情况
    mask_not_na = col_values.notna()
    
    # 条件判断:colocation(值为0)
    mask_coloc = (col_values == 0) & mask_not_na
    result.loc[mask_coloc, colocation_col] = f'{base_name} is colocated'
    
    # 条件判断:overlap(1-5.5之间)
    mask_overlap = (col_values.between(1, 5.5)) & mask_not_na
    result.loc[mask_overlap, overlap_col] = f'{base_name} has overlap'
    
    # 条件判断:opposite timezone(大于5.5)
    mask_opposite = (col_values > 5.5) & mask_not_na
    result.loc[mask_opposite, opposite_col] = f'{base_name} in opposite timezone'
    
    return result

# 处理所有输入列,合并结果
output_dfs = []
for col in delivery_df.columns:
    output_dfs.append(process_overlap_column(col, delivery_df))

output_df = pd.concat(output_dfs, axis=1)

# 打印结果
print(output_df)

关键修改说明

  • 按列独立处理:每个输入列单独生成对应的三个输出列,不再依赖单一列的值批量赋值
  • NA值处理:所有输出列初始化为NA,仅当输入列非NA时,根据值的范围填充对应输出列;若输入列是NA,对应的三个输出列保持NA
  • 高效操作:使用Pandas的向量化方法(loc、notna、between)替代iterrows和append,提升运行效率
  • 语法修正:原代码中"Developer & Product has overlap"的表述不符合语法,已统一调整为正确的表述逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:43:13