根据数据类型切片数据帧

时间:2017-04-06 18:00:59

标签: pandas indexing

    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,但它也会删除未损坏的条目。

1 个答案:

答案 0 :(得分:1)

expect_numeric_columns = ['Energy', 'ESupply']

选项1
applystr.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.....    ....
相关问题