我有一个示例pandas dataframe df:
col1 col2 col3 col4 0 a 1.0 2.0 3 1 b NaN NaN 6 2 c NaN 8.0 9 3 d NaN 11.0 12 4 e 13.0 14.0 15 5 f 17.0 18.0 19 6 g 21.0 22.0 23
和第二个df1:
col1 col2 col3 col4 0 a 1.0 2.0 3 4 e 13.0 14.0 15 5 f 17.0 18.0 19 6 g 21.0 22.0 23
我想获得与df1不重叠的df子集.实际上我在sql中寻找等效的EXCEPT操作数.
我使用了subtract()函数 – 但这显然是错误的,因为减法执行元素数字减法.所以我收到一条错误消息:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
所以问题是:在Pandas的sql中,EXCEPT的等价物是什么?
解决方法
我认为你首先需要
set_index
的所有字符串列:
df2 = df.set_index('col1').subtract(df1.set_index('col1'),axis='columns') print (df2) col2 col3 col4 col1 a 0.0 0.0 0.0 b NaN NaN NaN c NaN NaN NaN d NaN NaN NaN e 0.0 0.0 0.0 f 0.0 0.0 0.0 g 0.0 0.0 0.0
要么:
df2 = df.set_index('col1').subtract(df1.set_index('col1'),axis='columns',fill_value=0) print (df2) col2 col3 col4 col1 a 0.0 0.0 0.0 b NaN NaN 6.0 c NaN 8.0 9.0 d NaN 11.0 12.0 e 0.0 0.0 0.0 f 0.0 0.0 0.0 g 0.0 0.0 0.0
编辑问题编辑:
print (df.isin(df1)) col1 col2 col3 col4 0 True True True True 1 False False False False 2 False False False False 3 False False False False 4 True True True True 5 True True True True 6 True True True True print (df.isin(df1).all(axis=1)) 0 True 1 False 2 False 3 False 4 True 5 True 6 True dtype: bool print (~df.isin(df1).all(axis=1)) 0 False 1 True 2 True 3 True 4 False 5 False 6 False dtype: bool print (df[~(df.isin(df1).all(axis=1))]) col1 col2 col3 col4 1 b NaN NaN 6 2 c NaN 8.0 9 3 d NaN 11.0 12