我怀疑,每当我尝试用NaN
替换给定dataset中的?
时,我都会使用python提供的Numpy(此处为np
)库在python中编写以下代码
dataset = pd.read_excel("D:\Gursimran\AIML\Datasets\AdultIncomeData.xlsx")
dataset.replace('?', np.NaN, inplace=True)
当我运行这段代码时,它没有显示错误,但当我尝试通过以下方式查看数据集中的更改时:
dataset.head(10)
然后,我可以再次在我的数据集中看到?
。这些?
不会被替换。有人能告诉我我错过了什么吗?
请帮帮我。
发布于 2021-01-04 21:34:07
我的猜测是,一些/所有问号被一些看不见的字符所包围,例如空格、制表或换行符。例如,考虑以下示例数据:
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
https://stackoverflow.com/questions/65566362
复制