In [4]:
left.merge(right, on='key', how='left', indicator=True)\
         .query('_merge == "left_only"')\
         .drop(columns=['_merge'])
Out[4]:
key value_x value_y
2 c 3 NaN
In [5]:
left[~left.key.isin(right.key)]
Out[5]:
key value
2 c 3