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

Google Colab下载的DataFrame与显示数据不符的原因排查

问题分析与解决方案

核心问题原因

  1. 循环+append的稳定性问题:处理200万行数据时,用iterrows逐行遍历并反复调用append会导致严重的性能损耗,甚至可能因为Colab的内存限制、会话波动,导致newPrintable未正确写入最终筛选结果,出现显示行数与实际导出文件不一致的情况。
  2. 条件判断的冗余与潜在遗漏:你的判断逻辑中重复对比了223和223.0(Python中数值223 == 223.0为True),虽然逻辑上等价,但如果数据中存在未覆盖的格式(比如带空格的" 223"),会错误保留不符合要求的行。

优化后的筛选代码(高效且准确)

from google.colab import files
import pandas as pd

# 定义判断是否为墨西哥国籍的函数
def is_mexican(x):
    if pd.isna(x):
        return False
    # 统一转换为字符串并去除首尾空格,覆盖所有格式情况
    cleaned_val = str(x).strip()
    return cleaned_val in {"223", "223.0"}

# 生成筛选掩码:保留「父母不全为墨西哥」的行
filter_mask = ~(printableNacimientos["PA_NACIONALIDAD"].apply(is_mexican) 
                & printableNacimientos["MA_NACIONALIDAD"].apply(is_mexican))

# 应用筛选并复制数据,避免视图引发的异常
newPrintable = printableNacimientos[filter_mask].copy()

# 导出CSV
newPrintable.to_csv('newPrintable.csv', index=False, sep="|", na_rep=r'\N')
files.download('newPrintable.csv')

# 验证最终行数
print(f"筛选后有效行数:{len(newPrintable)}")

关键改进点

  • 向量化操作替代循环:用apply实现批量判断,比iterrows快数十倍,彻底避免循环带来的内存与稳定性问题。
  • 统一格式处理:将所有值转换为字符串并去空格,覆盖所有可能的编码格式(包括潜在的带空格、特殊字符的情况)。
  • 直观的逻辑掩码:直接用~(父墨西哥 & 母墨西哥)表示保留目标行,逻辑清晰,不易出错。

额外排查建议

  • 检查Colab会话的内存状态:200万行的DataFrame占用内存较高,若会话内存不足,可能导致数据处理异常。
  • 验证筛选结果:执行以下代码确认是否还存在双亲均为墨西哥的行:
    invalid_rows = newPrintable[(newPrintable["PA_NACIONALIDAD"].apply(is_mexican) 
                                 & newPrintable["MA_NACIONALIDAD"].apply(is_mexican))]
    print(f"无效行数(双亲均为墨西哥):{len(invalid_rows)}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:20:37