我有一个.txt
数据集,其中包含大约80个要素,其中"NA"
用作缺失值的指示符,以及特定序数字符串要素的实际值,例如为:
处理此问题的最佳方法是什么?
默认情况下,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.
答案 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