python - 将 "NA"处理为缺失值和序数特征值

标签 python pandas missing-data

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

enter image description here

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

默认情况下,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/

相关文章:

string - 从给定字符生成固定长度的随机字符串的内置方法

python - 在 numpy 中将 slice 包裹在二维数组的边缘

python - 将 4 个一对一映射列表转换为字典列表(python)

替换缺失值

python - 在 Tkinter 中,如何更正此循环/函数,以便每个按钮将值更改为按钮的值?

c++ - 使用 weave.inline 时出现段错误

pandas - 我应该转移数据集以将其用于 LSTM 回归吗?

python numpy round函数奇怪的错误

julia - 如何将值更改为缺失

python - 使用相似的行填充 python pandas 数据框中缺失的行