处理 "NA" 作为缺失值和序数特征值

dealing with "NA" as both missing value and ordinal feature value

我有一个包含大约 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"?如果是这样,这是怎么做到的?如果没有,这样做的更好方法是什么?谢谢!

编辑:我应该澄清一下,我假设 "NA" 也用于缺失值,因为如果我从中删除 "NA" na_values 列表,data.isnull().sum().sum() returns 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.

解决方案
解析两次,要求我知道具有合法 '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