我有两个数据帧.例子:
df1:
Date Fruit Num Color
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange 8.6 Orange
2013-11-24 Apple 7.6 Green
2013-11-24 Celery 10.2 Green
df2:
Date Fruit Num Color
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange 8.6 Orange
2013-11-24 Apple 7.6 Green
2013-11-24 Celery 10.2 Green
2013-11-25 Apple 22.1 Red
2013-11-25 Orange 8.6 Orange
Run Code Online (Sandbox Code Playgroud)
每个数据帧都以Date作为索引.两个数据帧都具有相同的结构.
我想要做的是比较这两个数据帧,并找出df2中哪些行不在df1中.我想比较日期(索引)和第一列(Banana,APple等),看看它们是否存在于df2和df1中.
我尝试过以下方法:
对于第一种方法,我得到了这个错误:"异常:只能比较标记相同的DataFrame对象".我已经尝试删除日期作为索引,但得到相同的错误.
在第三种方法中,我得到断言返回False但无法弄清楚如何实际看到不同的行.
任何指针都会受到欢迎
在单元测试一些函数的上下文中,我试图使用python pandas建立2个DataFrame的相等性:
ipdb> expect
1 2
2012-01-01 00:00:00+00:00 NaN 3
2013-05-14 12:00:00+00:00 3 NaN
ipdb> df
identifier 1 2
timestamp
2012-01-01 00:00:00+00:00 NaN 3
2013-05-14 12:00:00+00:00 3 NaN
ipdb> df[1][0]
nan
ipdb> df[1][0], expect[1][0]
(nan, nan)
ipdb> df[1][0] == expect[1][0]
False
ipdb> df[1][1] == expect[1][1]
True
ipdb> type(df[1][0])
<type 'numpy.float64'>
ipdb> type(expect[1][0])
<type 'numpy.float64'>
ipdb> (list(df[1]), list(expect[1]))
([nan, 3.0], [nan, 3.0])
ipdb> df1, df2 = (list(df[1]), list(expect[1])) ;; df1 == df2
False
Run Code Online (Sandbox Code Playgroud)
鉴于我试图expect
对整个(df
包括NaN
职位)进行全面测试,我做错了什么?
比较包括 …
我有一个带有布尔条目的熊猫系列.我想得到值为的索引列表True
.
例如输入 pd.Series([True, False, True, True, False, False, False, True])
应该产生输出[0,2,3,7]
.
我可以用列表理解来做到这一点,但有更清洁或更快的东西吗?
更新:要比较“关闭”而不是“相等”,请在对“assert_frame_equal”的调用中使用“check_exact=False”,详情如下:https ://pandas.pydata.org/pandas-docs/stable/generated/pandas.testing .assert_frame_equal.html。
原始问题: Pandas 数据框包含N列浮点数。
我想检查每对可能的列中的元素是否相等(因此检查 i 列中的所有元素是否与 j 列中的所有元素在某个容差范围内接近)。
我可以迭代和使用np.allclose(...)
,但我想知道在 Pandas 中是否有更好的(阅读:内置)方式来做到这一点,理想情况下我可以使用列标签?
我在想:df.allclose(['a', 'b', 'c'])
某种东西......