【问题标题】:Filling several NaN values, based on 2 conditions, with a certain numeric value根据 2 个条件,用某个数值填充几个 NaN 值
【发布时间】:2019-07-04 01:32:12
【问题描述】:

所以基本上,我一直在尝试根据另一列填充一列的 nan 值。

假设我有一个名为“accommodates”的列(表示某所房子可以容纳多少人)和另一个名为卧室的列。

为了填充这些 nan 值,我发现,例如,当房子有 1 间卧室时,最常见的值是多少。它返回最常见的值是 2。我现在要做的是填充列中的 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 值(另外,如果您知道比将值 2 重复 14 次更好的方法,我将不胜感激:D)

但是,它不起作用。它返回错误:

ValueError: list of cases must be same length as list of conditions

我尝试打印 acccom_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 个空值。

谁能帮我解决这个问题? (提前感谢您抽出宝贵时间阅读本文!)

【问题讨论】:

  • 请在问题中添加一个简短的数据框示例。
  • @Kasrâmvd 刚刚在上面添加了更多内容!!

标签: python pandas numpy nan data-cleaning


【解决方案1】:
 accom_cond=[((house.bedrooms==1) & (house.accommodates.isna()))]
 accom_val= [2]

根据numpy.select documentation:第一个参数是您的条件列表。第二个参数是您的选项列表。
这意味着如果满足第一个条件,则返回第一个选项,否则如果满足第二个条件,则返回第二个选项,依此类推。否则返回第三个参数。

【讨论】:

  • 我会发誓我尝试过类似的方法,但它没有用啊啊啊!现在可以了!非常感谢!!
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多