Country Energy ESupply
1 Afghanistan 321000000 10
2 Albania 102000000 35 100
3 Algeria 1959000000 51
4 American LLLLLL..... ....
5 Andorra 9000000 121
我试图在数据框中查找异常/数据损坏,但要查找非数值。
如何使用布尔索引来执行此操作?
df.where(df!=(int或float))
我查看了文档,但没有找到我认为可以使用的任何内容。
编辑:
以下是使用PirSquared的第一个解决方案后数据框的外观。 别担心额外的列。 (OP示例是精简版)。
Country Energy Supply Energy Supply per Capita % Renewable
1 Afghanistan 321000000 10 78.6693
3 Algeria 1959000000 51 .55101
4 American Samoa ................................................. ... 0.641026
5 Andorra 9000000 121 88.6957
6 Angola 642000000 27 70.9091
9 Argentina 3378000000 79 24.0645
10 Armenia 143000000 48 28.2361
因此它能够删除一些损坏的条目,如行4
,但它也会删除未损坏的条目。
答案 0 :(得分:1)
expect_numeric_columns = ['Energy', 'ESupply']
选项1
将apply
与str.isnumeric
corrupted = df[
df[expect_numeric_columns].apply(
lambda c: ~c.astype(str).str.isnumeric()
).any(1)
]
print(corrupted)
Country Energy ESupply
2 Albania 102000000 35 100
4 American LLLLLL..... ....
选项2
使用pd.to_numeric
corrupted = df[
pd.to_numeric(
df[expect_numeric_columns].stack(), errors='coerce'
).unstack().isnull().any(1)
]
print(corrupted)
Country Energy ESupply
2 Albania 102000000 35 100
4 American LLLLLL..... ....