我有两个基本相同的 Dataframe 。但是,在特定列中,某些行的值(浮点数)是不同的。我想计算值不同的行数。如果不是因为以下两件事,这项任务看起来相当简单
而最重要的
当一系列浮点数中有Nan时,如何比较这些浮点数
kuhbmx9i1#
使用pandas中的round和compare
round
compare
import pandas as pd d1 = {"col": [7.1, 2.0, 3.0, 4.0, None, 1.9, 1.3]} d2 = {"col": [7.1, 2.5, 3.0, 4.0, None, 1.2, None]} df1 = pd.DataFrame(d1) df2 = pd.DataFrame(d2) # to deal with the precision issue, say we want to round to 4 decimal place df1["col"] = df1["col"].round(4) df2["col"] = df2["col"].round(4) # returns a dataframe with the differences comparison = df1.compare(df2) print(comparison) print("different rows count:", len(comparison))
字符串输出将是
col self other 1 2.0 2.5 5 1.9 1.2 6 1.3 NaN different rows count: 3
型
2lpgd9682#
使用numpy.isclose和equal_nan=True参数,如果需要,通过rtol参数设置精度,最后计数True s使用sum:
numpy.isclose
equal_nan=True
rtol
True
sum
df = pd.DataFrame({'a':[np.nan, 10.12], 'b':[np.nan, 10.121231]}) out = np.isclose(df.a, df.b, equal_nan=True, rtol = 0.003) print (out) [ True True] print (out.sum()) 2 different = len(out) - out.sum() 0
字符串
2条答案
按热度按时间kuhbmx9i1#
使用pandas中的
round
和compare
字符串
输出将是
型
2lpgd9682#
使用
numpy.isclose
和equal_nan=True
参数,如果需要,通过rtol
参数设置精度,最后计数True
s使用sum
:字符串