我有一个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().
可能是什么问题?
答案 0 :(得分:2)
请尝试使用按位运算符|
,如下所示:
df1=df[ (~np.isnan(df["year"])) | (~np.isnan(df["current"]))]
根据EdChum的建议,使用dropna()
可能是最干净,最好的解决方案。您可以通过here
答案 1 :(得分:2)
您只需致电dropna
即可实现此目标:
df1 = df.dropna()
至于为什么你尝试失败的or
运算符在比较类似数组的结构时不理解它应该做什么,因为如果一个或多个元素符合布尔条件,它是不明确的,你应该使用按位运算符{ {1}},&
和|
代表~
,and
和or
。此外,对于多个条件,您需要根据运算符优先级将条件包装在括号中。
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