问题描述
我对 python 还很陌生,所以请原谅我的愚蠢问题和我的代码的粗糙。
我正在从提供的数据集(.dta 格式)中读取数据,遗憾的是缺失的错误似乎以文本形式出现,而其他数据点是数字。我读入的数据为:
w2bio = pd.read_stata(r'./Data/w2_nurse.dta',columns=['idauniq','hscrp','cfib'
])
它给了我一个具有唯一 ID 的数据框和两个变量(它们是分类的,包含带有小数位和字符串的数值):
w2bio.dtypes
Out[212]:
idauniq category
hscrp category
cfib category
dtype: object
w2bio['cfib'].value_counts
Out[214]:
<bound method IndexOpsMixin.value_counts of 0 3.2
1 3.1
2 2.9
3 3.7
4 3.3
7661 2.9
7662 2.9
7663 3.4
7664 Blood sample not taken
7665 3.2
Name: cfib,Length: 7666,dtype: category
Categories (68,object): ['Blood sample not taken' < 'Sample leaked' < 'Sample unusable (for other reason)' < 'Period between collection and receipt in the ... ... 7.7 < 7.8 < 8.5 < 8.9]>
我已经尝试了以下
w2bio['cfib'] = w2bio['cfib'].cat.codes
然后允许我将变量转换为浮点数,这就是它应该是的(因为变量是连续的)。但是,将文本缺失代码返回到它们各自的分类代码也会将数值更改为它们在列表中的顺序,使它们变得无用。
我怎样才能只选择有文本的行来改变它?或者在不选择标签的情况下读入 stata 文件和/或在 read_stata 命令上指定我选择的变量的数据类型?
值标签的自动包含让我很疯狂,因为我在 R 中的情况正好相反,我似乎根本无法获得标签。
我真的很感激这里的一些指导,因为我花了一周的时间试图让我解决这个问题,但没有运气。
解决方法
我设法找到了我的错误 - 我想分享一下。
我仍然不知道如何仅定位列中的文本,但我的 dara 中的错误发生在读入阶段。
w2bio = pd.read_stata(r'./Data/w2_nurse.dta',columns=['idauniq','hscrp','cfib'
])
将变量转换为类别,因为 read_stata 中的 convert_categoricals 选项默认为 true,因此我的解决方案是:
w2bio = pd.read_stata(r'./Data/w2_nurse.dta','cfib'
],convert_categoricals=False)
在这种格式中,它以浮点形式引入了变量,自然更容易控制和调整
,我很少使用类别,但是如果您试图将浮动和类别代码分开 - 您可以尝试这样的方法,将它们分开并重新组合
The idempotency token associated with the request.