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

使用Pandas与Python对比数据源:重复读取CSV却不匹配的问题排查

为啥两次读取的CSV匹配率不是100%?我帮你捋捋

先给你揪出最直观的问题:你代码里读取的是两个不同路径下的同名文件——02 dump/reputation.csv和00 data/reputation.csv,这俩文件十有八九内容不一样,这绝对是匹配率不达标的首要原因。要是你是不小心写错了路径,先赶紧确认是不是读的同一个文件;要是本来就是要对比这两个文件,那内容有差异太正常了。

假设你确实是想读同一个文件(比如手滑写错路径),那还有这些坑可能踩了:

  • 浮点精度的隐形坑:虽然你加了float_precision='round_trip',但有些特殊浮点数在存进CSV再读出来的过程中,还是会有极其微小的精度损失,肉眼看不出来,但代码对比就是不相等。你可以用pd.testing.assert_frame_equal来对比,它能设置误差容忍度,忽略这种微小差异。
  • 行/列顺序乱了:要是两个DataFrame的行排序或者列顺序不一样,你逐行遍历对比肯定对不上啊。比如一个是按ID排序,另一个是按时间排序,那对应位置的行内容自然不同。对比前先按相同的列把两个DataFrame排好序就行。
  • 看不见的字符在搞鬼:单元格里可能藏着空格、换行符、制表符这些不可见字符,看起来内容一样,实际字符串完全不同。可以先给所有字符串列做个str.strip()清理掉多余字符再对比。
  • 缺失值解析不一样:read_csv对空值的处理可能有差异,比如一个文件里的空单元格被解析成NaN,另一个被解析成空字符串,这样对比的时候就会判定不相等。你可以看看两个DataFrame的dtypes和缺失值情况。
  • 编码不统一:如果两个文件的编码格式不一样(比如一个是UTF-8,一个是GBK),读出来后某些字符会乱码,字符串对比自然失败。读取的时候统一指定encoding='utf-8'试试。

给你个实用的排查代码,用pd.testing.assert_frame_equal直接找出差异:

import pandas as pd

_new = pd.read_csv('02 dump/reputation.csv', sep=';', float_precision='round_trip')
_data = pd.read_csv('00 data/reputation.csv', sep=';', float_precision='round_trip')

try:
    # 设置误差容忍度,忽略微小浮点差异
    pd.testing.assert_frame_equal(_new, _data, rtol=1e-9, atol=1e-9)
    print("两个数据集完全一致!")
except AssertionError as e:
    print("找到差异啦:", e)

要是你本来就是要对比两个不同路径的文件,用这段代码能直接输出差异行,方便定位问题:

# 合并两个数据集,标记差异行
diff_df = pd.merge(_new, _data, how='outer', indicator=True)
# 筛选出只在一个数据集中出现的行
diff_rows = diff_df[diff_df['_merge'] != 'both']
print("差异的具体内容:")
print(diff_rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:07:15