2017-04-06 30 views
1
Country  Energy   ESupply 
1 Afghanistan00000  10 
2 Albania  102000000 35 100 
3 Algeria  1959000000  51 
4 American  LLLLLL..... ....   
5 Andorra  9000000  121  

我試圖在數據框中查找異常/數據損壞,但通過查找非數字值。根據數據類型切片數據幀

如何使用布爾索引來做到這一點?

df.where(DF!=(整數或浮點數))

我通過文檔看了,但沒有發現任何東西,我覺得我可以使用。

編輯:

下面是數據框的外觀使用PirSquared的第一個解決方案之後。 不介意額外的列。 (OP示例是精簡版)。

Country Energy Supply Energy Supply per Capita % Renewable 
1 Afghanistan00000   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

df_corrupted = df.loc [:,df.dtypes!= np.number]? – Vaishali

+0

我很快測試出來。它似乎正在打印誰的數據框,所以它不起作用?午餐後我會重新檢查。 – Moondra

回答

1
expect_numeric_columns = ['Energy', 'ESupply'] 

選項1
使用apply使用pd.to_numeric

一個 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

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..... .... 
+0

這是一些high_level的東西。要去測試它。 – Moondra

+0

嗨PiR,我得到這個錯誤: 'TypeError:(「錯誤操作數類型的一元〜:'浮動'」,'發生在索引能源供應')'。 「能源供應」是我的專欄之一。 我正在使用Jupyter筆記本(〜在筆記本上看起來很有趣,所以不確定是否會導致錯誤?) – Moondra

+0

@moondra更新後。添加了一個'astype(str)'。 – piRSquared