2016-04-28 187 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 
相关问题