所以基本上,我一直在尝试根据另一列填充列的nan值。
比如说,我有一个专栏叫做“住宿”(意思是一个房子能容纳多少人)和另一个专栏叫做卧室。
为了满足这些nan值,我发现,例如,当一个房子有一个卧室时,最常见的住宿价值是什么。它返回最常见的值是2。我现在想做的是在acposites列中填充nan值,它对应于一个1居室的房子,有2个。
数据示例如下:
accommodates bathrooms bedrooms
nan 2.0 1.0
nan 2.0 1.0
nan 2.0 1.0
nan 2.0 1.0
nan 2.0 1.0
nan 2.0 1.0
... ... ...
我对其他属性也做过类似的操作,因此尝试了以下代码:
accom_cond=((house.bedrooms==1) & (house.accommodates.isna()))
accom_val= [2,2,2,2,2,2,2,2,2,2,2,2,2,2]
house.accommodates= np.select(accom_cond,accom_val,house.accommodates)
这是假设在这种情况下有14个NaN值(而且,如果你知道比重复214次更好的方法,我会很感激:d)
但是,它不起作用。它返回错误:
ValueError: list of cases must be same length as list of conditions
我试图打印acom cond以查看发生了什么,它返回了:
accom_cond
Out[156]:
0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
15 False
16 False
17 False
18 False
19 False
20 False
21 False
22 False
23 False
24 False
25 False
26 False
27 False
28 False
29 False
...
我不明白为什么它不返回14个符合我定义的条件的空值。
有人能帮我吗?
(提前感谢您抽出时间阅读此文!!)
最佳答案
accom_cond=[((house.bedrooms==1) & (house.accommodates.isna()))]
accom_val= [2]
根据
numpy.select
documentation:第一个参数是您的条件列表。第二个参数是选项列表。这意味着,如果满足第一个条件,则返回第一个选项,否则,如果满足第二个条件,则返回第二个选项,依此类推。否则返回第三个参数。