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

时间:2017-07-31 20:05:51

标签: pandas na missing-data

我有一个.txt数据集,其中包含大约80个要素,其中"NA"用作缺失值的指示符,以及特定序数字符串要素的实际值,例如为:

enter image description here

处理此问题的最佳方法是什么?

默认情况下,pandas会将这些"NA"值转换为"nan"。我已经阅读了如何通过从列表"NA"中删除na_vals来解决此问题:

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"不是可能值的每个功能,我是否应该使用"nan"手动替换"NA"值?如果是这样,这是怎么做到的?如果没有,那么更好的方法是什么?谢谢!

修改:我应该澄清一下,我已经假设"NA"也用于缺失值,因为如果我从{{"NA"删除na_values 1}} list,data.isnull().sum().sum()返回0。所以我想我的假设是正确的,或者整个数据集中实际上没有缺失值。我不确定如何确定哪一个是真的。 The dataset description page can be found here.

1 个答案:

答案 0 :(得分:2)

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