我有一个包含大约 80 个特征的 .txt
数据集,其中 "NA"
既用作缺失值的指示符,也用作缺失值的指示符特定序数字符串特征的实际值,例如:
处理这个问题的最佳方法是什么?
默认情况下,pandas 会将这些 "NA"
值转换为 "nan"
。我阅读了如何通过从列表 na_vals
中删除 "NA"
来阻止此操作,如下所示:
na_vals = ['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan']
na_vals.remove("NA")
data = pd.read_table('data/AmesHousing.txt', delimiter="\t", keep_default_na=False, na_values=na_vals)
但是,对于 "NA"
不是其的每个功能,我是否应该手动将 "NA"
值替换为 "nan"
可能的值(value)?如果是这样,这是如何完成的?如果没有,有什么更好的方法呢?谢谢!
编辑:我应该澄清一下,我假设 "NA"
也用于缺失值,因为如果我删除 "NA"
从 na_values
列表中,data.isnull().sum().sum()
返回 0
。所以我想要么我的假设是正确的,要么整个数据集中实际上没有缺失值。我不确定如何确定哪一个是正确的。 The dataset description page can be found here.
最佳答案
在 Jupyter
中,我使用 %%writefile
魔法来设置测试文件。如果您已有文件,则无需执行此操作。
%%writefile test.csv
col1,col2,col3
Ex,1.,2.
Gd,3.,4.
TA,5.,NA
NA,6.,7.
解决方案
解析两次,要求我知 Prop 有合法 'NA'
值的列的名称。确保使用与您相关的列名称填充列表。
cols_with_legit_NA = ['col1']
legit_df = pd.read_csv(
'test.csv',
usecols=cols_with_legit_NA,
keep_default_na=False
)
df = pd.read_csv('test.csv').assign(**legit_df)
df
col1 col2 col3
0 Ex 1.0 2.0
1 Gd 3.0 4.0
2 TA 5.0 NaN
3 NA 6.0 7.0
关于python - 将 "NA"处理为缺失值和序数特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424430/