昨天使用了 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
三个方法看情况用吧,如果需要知道详情,那就后面两种方法。