根据另一个dataFrame的某些列值制作pandas dataFrame

时间:2016-04-28 10:21:30

标签: python pandas dataframe

我有一个pandas DataFrame 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但仍包含空值的行的DataFrame。例如:

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().

可能是什么问题?

3 个答案:

答案 0 :(得分:2)

请尝试使用按位运算符|,如下所示:

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

根据EdChum的建议,使用dropna()可能是最干净,最好的解决方案。您可以通过here

了解更多相关信息或使用缺失数据

答案 1 :(得分:2)

您只需致电dropna即可实现此目标:

df1 = df.dropna()

至于为什么你尝试失败的or运算符在比较类似数组的结构时不理解它应该做什么,因为如果一个或多个元素符合布尔条件,它是不明确的,你应该使用按位运算符{ {1}},&|代表~andor。此外,对于多个条件,您需要根据运算符优先级将条件包装在括号中。

not

答案 2 :(得分: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