Python-Pandas之两个Dataframe的比较(三)

本文介绍三种在Python中使用Pandas库比较DataFrame的方法:使用equals函数、any函数和Eq方法,详细展示了如何检测DataFrame之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天使用了 hashlib 库,今天直接使用 Dataframe 自带的函数去比较两个 df

一,使用 equals 函数对比:

import sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])


# 使用 equals 比较两个数据框
try:
    df3 = df1.equals(df2)
    print('使用 df.equals 检测是否相同:', df3)
except Exception as err:
    print(err)

 

 

 

二,使用 any 对比:

mport sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])


# 使用 any 比较两个数据框,只能使用相同行数的数据
try:
    df3 = (df1 != df2).any(axis=None)
    print('使用 df.any 检测是否相同:', df3 == False)
    df3 = (df1 != df2).any(1)
    ne_stacked = (df1 != df2).stack()
    changed = ne_stacked[ne_stacked]
    changed.index.names = ['行', '列']
    print('不相同的位置:')
    print(changed)
except Exception as err:
    print(err)

后面的 changed 是打印不同的地方,可以查看

 

 

三、使用 Eq 比较两个数据

import sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])

# 使用 Eq 比较两个数据框
try:
    df3 = df1.eq(df2)
    print('使用 df.Eq 检测每一列是否相同:', False not in df3.all().values) # 如果每一列都相等,那么就都是 True
    df4 = df3.all(axis=0)
    df4 = pd.DataFrame(df4, columns=['列'])
    print('不相同的列位置:')
    print(df4[df4['列'] == False])
except Exception as err:
    print(err)

这个比较之后,是把每一列是否相等放到一个新的 Series 里面,然后看看是否包含 False

三个方法看情况用吧,如果需要知道详情,那就后面两种方法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值