hsp.loc[hsp['Len_old'] == hsp['Len_new']]
我尝试使用此代码,它正在运行。
但我尝试了这些树
hsp.loc[hsp['Type_old'] == hsp['Type_new']]
hsp.loc[hsp['Type_old'] != hsp['Type_new']]
hsp.loc[hsp['Len_old'] != hsp['Len_new']]
他们没有工作。
我的数据表hsp就像
id Type_old Type_new Len_old Len_new
1 Num Num 15 15
2 Num Char 12 12
3 Char Num 10 8
4 Num Num 4 5
5 Char Char 9 10
是否有更好的方法来选择两列不是排队的行。
答案 0 :(得分:6)
使用补充operator(~
)
hsp.loc[~(hsp['Type_old'] == hsp['Type_new'])]
给出:
id Type_old Type_new Len_old Len_new
1 2 Num Char 12 12
2 3 Char Num 10 8
在处理布尔运算时,补码运算符是用True
False
的便捷方式
答案 1 :(得分:3)
比较==
!=
与pd.Series
混淆的方法
正如所料
df[['Len_old', 'Len_new']].assign(NE=df.Len_old != df.Len_new)
Len_old Len_new NE
0 15 15 False
1 12 12 False
2 10 8 True
3 4 5 True
4 9 10 True
但是,如果其中一个列的值是字符串!
df[['Len_old', 'Len_new']].assign(NE=df.Len_old.astype(str) != df.Len_new)
Len_old Len_new NE
0 15 15 True
1 12 12 True
2 10 8 True
3 4 5 True
4 9 10 True
确保两者的类型相同。
答案 2 :(得分:1)
正如 piRSquared 所说,您的代码存在类型问题。
除此之外,您还可以使用比较方法,在本例中为 pd.Series.ne
使用您的数据:
hsp.loc[hsp['Type_old'].ne(hsp['Type_new'])]
但同样,正如 piRSquared 提到的,由于 dtypes 它不起作用。
以防万一,您必须注意数据中的 NaN
/None
值...例如:
hsp.loc[ ( hsp['Type_old'].ne(hsp['Type_new']) ) && (hsp['Type_old'].notna())]
在这种情况下,.ne
有另一个参数 fill_value
,用于填充缺失的数据。
此外,您可以使用“比较”方法来显示两个系列(或 DataFrames)之间的差异
hsp.Len_old.compare(hsp.Len_new)
它可能会返回(如果列的数据类型相同):
self other
2 10.0 8.0
3 4.0 5.0
4 9.0 10.0
但只是强制使用另一个 dtype:
hsp.Len_old.compare(hsp.Len_new.astype('str')) # string type new column
它将返回所有行:
self other
0 15 15
1 12 12
2 10 8
3 4 5
4 9 10