首页 > 解决方案 > 2 Pandas 比较并确定阈值

问题描述

如何比较 2 个不同的 pandas csv 文件(csv 到 pandas)并且由于阈值返回 True 或 False。

例如 A=[101 202 405] 和 B=[103 201 409] ,阈值 =+-5 BA=[2 -1 4] 所以它会返回 True

我怎样才能做到这一点?非常感谢。

我的程序喜欢; a=pd.read_csv(str(myvariable)+'/'+str(myvariable)+'.csv') b=pd.read_csv(str(counter)+'/'+str(counter)+'.csv') c=((ba).abs().le(3)) 我可以看到 ValueError: The truth value of a Series is ambiguous。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。什么是解决方案?

标签: python-3.xpandas

解决方案


差异得到绝对值后Series.abs,通过Series.le( <=) 或Series.lt( <) 比较并检查是否所有值都是Trues by Series.all

A = pd.Series([101, 202, 405])
B = pd.Series([103, 201, 409]) 

#less or equal   
C = (B - A).abs().le(5).all()
#less
#C = (B - A).abs().lt(5).all()
print (C)
True

详情

print ((B - A).abs())
0    2
1    1
2    4
dtype: int64

print ((B - A).abs().le(5))
0    True
1    True
2    True
dtype: bool

编辑:

对于读取 DataFrames 需要纯 python,因为非标准格式(pandas 最好支持读取标量read_csv):

with open('1.csv') as f:
    data1 = f.readlines()

data1 = [[float(y) for y in x.strip().strip('[').strip(']').split()] for x in data1] 
A = pd.DataFrame(data1)
print (A)
       0      1      2
0  166.0  156.0  153.0
1  166.0  156.0  153.0
2  168.0  158.0  154.0

with open('2.csv') as f:
    data2 = f.readlines()

data2 = [[float(y) for y in x.strip().strip('[').strip(']').split()] for x in data2] 
B = pd.DataFrame(data2)
print (B)
       0      1      2
0  142.0  130.0  127.0
1  142.0  130.0  127.0
2  142.0  130.0  126.0

对于比较 DataFrames 使用DataFrame.all

#python 0.24+ solution
C = (B - A).abs().le(5).all(axis=None)
#alternative for python bellow
#C = (B - A).abs().le(5).values.all(axis=None)
print (C)
False

推荐阅读