让我们说我有一个名为" ab.sav"的spss文件。看起来像这样:
gender value value2
F 433 329
. . 787
. . .
M 121 .
F 311 120
. . 899
M 341 .
在spss(变量视图)中,我分别为gender
和1
定义了2
的标签M
和F
。
当我使用以下命令在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
答案 0 :(得分:0)
假设data2
是pandas DataFrame,并且value
和gender
中的空值之间存在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