2016-04-28 181 views
1

我有以下內容的熊貓數據幀DF1的一些列值的熊貓數據幀:製作基於另一個數據框

Serial N   year   current 
    B    10   14 
    B    10   16 
    B    11   10 
    B    11    
    B    11   15 
    C    12   11 
    C       9 
    C    12   13 
    C    12    

我想提出一個基於df1一個數據幀,但有任何行包含已刪除的空值。例如:

Serial N   year   current 
    B    10   14 
    B    10   16 
    B    11   10 
    B    11   15 
    C    12   11 
    C    12   13 

我想是這樣的

df1=df[~np.isnan(df["year"]) or ~np.isnan(df["current"])] 

但我收到以下錯誤:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

可能是什麼問題呢?

回答

2

您只需調用dropna來實現這一目標:

df1 = df.dropna() 

至於爲什麼你嘗試過什麼失敗or經營者不明白什麼應該做的當比較數組類似的結構時,如果一個或多個元素符合布爾條件,它是不明確的,則應分別使用&,|~and,ornot的位運算符。此外,對於多個條件,由於運算符優先級,您需要將條件包含在括號中。

In [4]: 
df.dropna() 

Out[4]: 
    Serial N year current 
0  B 10  14 
1  B 10  16 
2  B 11  10 
4  B 11  15 
5  C 12  11 
7  C 12  13 
+1

或'DF1 = df.dropna()' – Thanos

+0

@Thanos的確,已經更新 – EdChum

+0

謝謝。這工作完美 – user3841581

2

請嘗試用位運算符|代替,就像這樣:

df1=df[ (~np.isnan(df["year"])) | (~np.isnan(df["current"]))] 

使用dropna(),通過EdChum的建議,很可能是這裏最乾淨最整潔和解決方案。你可以閱讀更多關於這個或工作缺少數據通常here

2

,如果你真的有空白單元格,而不是NaN的:

In [122]: df 
Out[122]: 
    Serial_N year current 
0  B 10.0 14.0 
1  B 10.0 16.0 
2  B 11.0 10.0 
3  B 11.0 
4  B 11.0 15.0 
5  C 12.0 11.0 
6  C   9.0 
7  C 12.0 13.0 
8  C 12.0 

In [123]: a.replace('', np.nan).dropna() 
Out[123]: 
    Serial_N year current 
0  B 10.0 14.0 
1  B 10.0 16.0 
2  B 11.0 10.0 
4  B 11.0 15.0 
5  C 12.0 11.0 
7  C 12.0 13.0 
相關問題