在机器学习中使用python替换数据集中无用的字符以清理数据集

2024-09-30 16:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我怀疑,每当我试图用NaN替换给定数据集中的?时,我都会使用python提供的Numpy(np这里)库用python编写以下代码

dataset = pd.read_excel("D:\Gursimran\AIML\Datasets\AdultIncomeData.xlsx")
dataset.replace('?', np.NaN, inplace=True)

当我运行此代码时,它不会显示任何错误,但当我尝试通过以下方式查看dataset中的更改时:

dataset.head(10)

然后,我可以在我的数据集中再次看到?。这些?没有被替换。谁能告诉我我错过了什么

请帮帮我

enter image description here


Tags: 数据代码numpyreadnpnanexceldataset
1条回答
网友
1楼 · 发布于 2024-09-30 16:29:50

我猜部分/所有问号都被一些看不见的字符包围,如空格、制表符或换行符。例如,考虑以下样本数据:

import pandas as pd
import numpy as np

dataset = pd.DataFrame({
    'age': [19, 28, 41, 30],
    'workclass': ['?', 'Private', 'Self-emp-inc', '   ?'],
    'occupation': ['Sales', '?', '?    ', 'Tech-support']
})

如果我们使用print(dataset),我们会看到:

   age     workclass    occupation
0   19             ?         Sales
1   28       Private             ?
2   41  Self-emp-inc         ?    
3   30             ?  Tech-support

如果我们仔细查看打印的数据,我们可能会注意到,第三行的问号并不是唯一的,因为它没有与职业栏的右侧对齐。然而,第四排的问号似乎是唯一的,但事实并非如此。因此,在替换中的单个问号时

print(dataset.replace('?', np.NaN))

只有第一行和第二行中的是固定的:

   age     workclass    occupation
0   19           NaN         Sales
1   28       Private           NaN
2   41  Self-emp-inc         ?    
3   30             ?  Tech-support

这可以通过替换空白来解决。我们可以使用正则表达式,如中所示

print(dataset.replace('\\s*\?\\s*', np.NaN, regex=True))

结果将是:

   age     workclass    occupation
0   19           NaN         Sales
1   28       Private           NaN
2   41  Self-emp-inc           NaN
3   30           NaN  Tech-support

相关问题 更多 >