如何防止将值自动分配给从SPSS导入的缺失数据

时间:2015-10-23 16:19:41

标签: python pandas spss

让我们说我有一个名为" ab.sav"的spss文件。看起来像这样:

gender  value  value2

F       433    329
.        .     787
.        .      .
M       121     .
F       311    120
.        .     899
M       341     .

在spss(变量视图)中,我分别为gender1定义了2的标签MF

当我使用以下命令在python中加载它时:

>>> from rpy2.robjects.packages import importr
>>> from rpy2.robjects import pandas2ri  
>>> foreign=importr("foreign")
>>> data=foreign.read_spss("ab.sav", to_data_frame=True, use_value_labels=True)
>>> pandas2ri.activate()
>>> data2=pandas2ri.ri2py(data)

我得到以下数据框:

>>> data2

  gender   value   value2
0   F        433    329
1   M        NaN    787
2   M        NaN    NaN
3   M        121    NaN
4   F        311    120
5   M        NaN    899
6   M        341    NaN

因此,给定案例的gender列中的缺失值将替换为后续案例的后续已知值。有一种简单的方法可以防止这种情况吗?

当我将use_value_labels更改为False时,我得到了预期的结果:

>>> data2

  gender   value   value2
0   2        433   329
1   NaN      NaN   787
2   NaN      NaN   NaN
3   1        121   NaN
4   2        311   120
5   NaN      NaN   899
6   1        341   NaN

但是,我希望能够使用标签代替gender的数字值,如上所述。理想情况下,输出应为:

>>> data2

  gender   value    value2
0   F        433     329
1   NaN      NaN     787
2   NaN      NaN     NaN
3   M        121     NaN
4   F        311     120
5   NaN      NaN     899
6   M        341     NaN

1 个答案:

答案 0 :(得分:0)

假设data2是pandas DataFrame,并且valuegender中的空值之间存在1对1的映射,您可以执行以下操作:

nulls = pandas.isnull(data2['value'])
data2.loc[nulls, 'gender'] = np.nan

然后把它变成:

  gender  value  value2
0      F    433     329
1    NaN    NaN     787
2    NaN    NaN     NaN
3      M    121     NaN
4      F    311     120
5    NaN    NaN     899
6      M    341     NaN