2017-05-15 16 views
1

我從read_html pandas的屬性中獲得以下數據幀。過濾數據幀的值時返回相同的初始輸入

A        1.48        2.64    1.02         2.46   2.73 
B       658.4        14.33    7.41        15.35   8.59 
C        3.76         2.07    4.61         2.26   2.05 
D   513854.86         5.70    0.00         5.35  30.16 

我想刪除超過150個,所以我做了一個df1= df[df > 150]行,但它返回同一個表。

然後我想在路徑route = pd.read_html(https//route , decimal='.')中包含小數,並繼續返回沒有過濾器的相同的初始數據幀。

這將是我想要的輸出:

A        1.48        2.64    1.02         2.46   2.73 
C        3.76         2.07    4.61         2.26   2.05 

回答

1

極品:

print (df) 
    0   1  2  3  4  5 
0 A  1.48 2.64 1.02 2.46 2.73 
1 B  658.40 14.33 7.41 15.35 8.59 
2 C  3.76 2.07 4.61 2.26 2.05 
3 D 513854.86 5.70 0.00 5.35 30.16 

df1 = df[~(df.iloc[:, 1:] > 150).any(1)] 
print (df1) 
    0  1  2  3  4  5 
0 A 1.48 2.64 1.02 2.46 2.73 
2 C 3.76 2.07 4.61 2.26 2.05 

或者:

df1 = df[(df.iloc[:, 1:] <= 150).all(1)] 
print (df1) 
    0  1  2  3  4  5 
0 A 1.48 2.64 1.02 2.46 2.73 
2 C 3.76 2.07 4.61 2.26 2.05 

說明:

首先選擇所有列,而不首先由iloc

print (df.iloc[:, 1:]) 
      1  2  3  4  5 
0  1.48 2.64 1.02 2.46 2.73 
1  658.40 14.33 7.41 15.35 8.59 
2  3.76 2.07 4.61 2.26 2.05 
3 513854.86 5.70 0.00 5.35 30.16 

然後比較 - 獲取布爾數據框:

print (df.iloc[:, 1:] > 150) 
     1  2  3  4  5 
0 False False False False False 
1 True False False False False 
2 False False False False False 
3 True False False False False 

print (df.iloc[:, 1:] <= 150) 
     1  2  3  4  5 
0 True True True True True 
1 False True True True True 
2 True True True True True 
3 False True True True True 

然後使用all的檢查,如果行的所有值具有True小號
any進行檢查,如果至少一個值是True

print ((df.iloc[:, 1:] > 150).any(1)) 
0 False 
1  True 
2 False 
3  True 
dtype: bool 

print ((df.iloc[:, 1:] <= 150).all(1)) 
0  True 
1 False 
2  True 
3 False 
dtype: bool 

最後一位Series~反轉,並通過boolean indexing過濾。

+0

嗨@jezrael非常感謝您的幫助!我面臨的問題是,當我嘗試'df.iloc [:, 1:]> 150'顯示所有列都是真實的時,你認爲我能做些什麼來克服這個問題? – ge00rge

+0

很高興能幫到;)美好的一天! – jezrael

相關問題