我尝试将.dta作为DataFrame打开。但出现错误:
“ValueError:列的值标签...并不是独一无二的。重复的标签是:“后跟在一列中出现两次的标签。
我知道在stata中用完全相同的值标签标记多个代码并不聪明(不是我的错)。经过一些研究,我知道,Pandas不会接受重复的价值标签(这是聪明的)。
但我找不到(好的)解决方案。是否存在:
a.在这个过程中,用pandas打开数据并重命名double(如“label”到“label(2)”)的平滑方法?
下面是数据的外观(括号中的值标签):
| multilabel
1 | 11 (oneone or twotwo)
2 | 22 (oneone or twotwo)
3 | 33 (other-label-which-is-unique)
我的代码到目前为止:
import pandas as pd
#followed by any option that delivers this solution:
dataframe = pd.read_stata('file.dta')
或
一个快速简单的方法来告诉stata:将所有重复值标签重命名为“label(2)”而不是“label”?是的,到目前为止,代码也相当无聊:
use "file.dta"
*followed by a loop which finds repeated labels and changes them
save "file.dta", replace
是的,有很多重复的价值标签要一个接一个地通过它。
这里的Stata-Commands生成一个最小的例子:
set obs 1
generate var1 = 1 in 1
set obs 2
replace var1 = 2 in 2
set obs 3
replace var1 = 3 in 3
generate var2 = 11 in 1
replace var2 = 22 in 2
replace var2 = 33 in 3
rename var2 multilabel
label define labelrepeat 11 "oneone or twotwo" 22 "oneone or twotwo"
label values multilabel labelrepeat
我对每一个建议都很满意!
3条答案
按热度按时间c2e8gylq1#
由于pandas至少为0.22,因此您可以将
convert_categoricals=False
传递给read_stata
,并且它不会尝试将数值Map到它们的定义。d = pd.read_stata('fooy_labels.dta', convert_categoricals=False)
您得到的DataFrame将在问题列中包含数值。现在您可以根据需要重新编码它们。
zazmityj2#
如果你有一个带有重复标签的变量,那么
将值标签放入字符串变量中,然后撤消
multilabel
值与先前附加的值标签的关联。我不知道你还需要做什么,也不知道你为什么要做其他事情。你现在得到的信息和以前一样。我不知道pandas是否会忽略值标签的定义。为了完整起见,这里有一种方法可以找出哪些变量的值标签与数值不一一对应。
cs7cruho3#
我的最终解决方案(在Stata中):
谢谢你尼克!