应用二进制映射会在数据集的某些列中提供 NaN

Applying binary map gives NaN in some columns of the dataset

提问人:kzs 提问时间:10/24/2023 最后编辑:desertnautkzs 更新时间:10/25/2023 访问量:41

问:

我有一个名为 Housing 的数据集,在某些列中有一些字符串值,如下所示:

enter image description here

我需要将这些“是”或“否”值转换为 0 或 1。为此,我使用以下代码片段:

varlist =  ['mainroad', 'guestroom', 'basement', 'hotwaterheating', 'airconditioning', 'prefarea']

# Defining the map function
def binary_map(x):
    return x.map({"yes": 1, "no": 0})

# Applying the function to the housing list
housing[varlist] = housing[varlist].apply(binary_map)
housing.head()

但是,我没有将 1 或 0 作为条目,而是在这些列中获得 NaN:enter image description here

有人能说出这里的错误是什么吗?

Python 熊猫 列表 数据集

评论


答:

1赞 Ömer Sezer 10/24/2023 #1

很奇怪,你的代码正在工作。如果您从文件中读取 DF,或将其写入文件,则可能是个问题。

我只随机生成 DF,以下代码正在工作。请在另一个文件上运行它。也许它可以帮助您找到问题所在。

法典:

import pandas as pd
import random

varlist = ['mainroad', 'guestroom', 'basement', 'hotwaterheating', 'airconditioning', 'prefarea']

data = {col: [random.choice(["yes", "no"]) for _ in range(5)] for col in varlist}
housing = pd.DataFrame(data)

print(housing)

def binary_map(x):
    return x.map({"yes": 1, "no": 0})

housing[varlist] = housing[varlist].apply(binary_map)
housing.head()
print(housing)

输出:

  mainroad guestroom basement hotwaterheating airconditioning prefarea
0      yes        no      yes              no              no      yes
1      yes       yes      yes              no              no      yes
2       no        no      yes             yes             yes      yes
3      yes        no      yes              no             yes       no
4      yes       yes       no             yes              no       no
   mainroad  guestroom  basement  hotwaterheating  airconditioning  prefarea
0         1          0         1                0                0         1
1         1          1         1                0                0         1
2         0          0         1                1                1         1
3         1          0         1                0                1         0
4         1          1         0                1                0         0