python-3.x - 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()。什么是解决方案?
解决方案
差异得到绝对值后Series.abs
,通过Series.le
( <=
) 或Series.lt
( <
) 比较并检查是否所有值都是True
s 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
推荐阅读
- c# - 有没有办法使用 selenium C# 在 Chrome 中以另一个用户身份登录?
- data-structures - Avl 树 - 在 i 之后找到树中丢失的第一个键
- c++ - 为什么私有方法覆盖基类公共虚拟方法(具有公共继承)?
- angular - 角 HttpClient | 相当于 curl --user (基本认证)
- regex - 如何在 Google Data Studio 中使用 REGEXP_EXTRACT 从 URL 路径中提取年份?
- postgresql - 可以用 plpgsql 读/写/删除操作系统文件吗?
- r - 使用 R ggplot2 grobs 来显示绘图。这会导致内存泄漏吗?
- python - 计算重复项,然后删除它们
- serialization - 确保在使用 CHtmlView 控件打开文件之前将文件保存为 XML
- python-3.x - tornado v6 似乎已经放弃了 tornado.web.asynchronous 协程。在代码中解决这个问题有什么不同的方法吗?