2017-09-04 1 views
-2

私はDataFrameとして.dtaを開こうとします。 エラーが表示されます: "ValueError:列の値ラベル...は一意ではありません。繰り返されるラベルは次のとおりです:"列に2つのラベルが続きます。パンダへのスタータ:繰り返しの値ラベルがあっても?

stataの正確な同じ値のラベルを持つラベリングマルチコードは、巧妙ではない(私のフォルトではありません:)) 私が知っているリサーチの後、パンダは繰り返し値ラベルを受け入れません。

しかし、私は(良い)解決策を見つけ出すことはできません。 があります:

。スムーズにパンダでデータを開き、このプロセスでダブルス( "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') 

または

B。すべての繰り返し値ラベルの名前を "label"ではなく "label(2)"に変更するだけです。 は、はい、コードはこれまでにもかなり退屈です:

use "file.dta" 

*followed by a loop wich finds repeated labels and changes them 

save "file.dta", replace 

そして、はい、それを一つずつ谷に行くために多くの繰り返し値ラベルにあります。

そして、ここでのStata-コマンドは、最小限の例を製造した:

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 

私はそれぞれの提案のために幸せです!

+0

ここで再現可能な例はありません。 https://stackoverflow.com/help/mcveはアドバイスを提供します。 –

+0

大丈夫です、あなたが正しいと思いますが、このケースではそれがあまり役に立たないと思っても、サンプルデータを持てば誰もがより高い品質を生み出すでしょう。悲しい。 –

+0

私はパンダの人ではなく、あなたが最も必要としている人ですが、Stataの終わりでは、 'decode multilabel、gen(valuelabel)'の後に 'label values multilabel'を付けて、問題のある値ラベルの繰り返しを取り除きます。 –

答えて

0

は、文字列変数に値ラベルを置き、その後multilabel値と以前に取り付けた値ラベルの関連付けを取り消します。私は他に何をする必要があるのか​​、なぜあなたは他のことをするのか分かりません。あなたは以前と同じ情報を持っています。私はパンダがバリューラベルの定義を無視するかどうかはわかりません。

完全性のために、数値と1対1で対応しない値ラベルを持つ変数を調べる方法は次のとおりです。

* your sandbox, simplified and extended 
clear 
set obs 3 
generate var1 = _n 
generate multilabel = 11 * _n 
label define labelrepeat 11 "oneone or twotwo" 22 "oneone or twotwo" 
label values multilabel labelrepeat 

label define var1 1 "frog" 2 "toad" 3 "newt" 
label val var1 var1 


* my code 
local bad 
ds *, has(vallabel) 

quietly foreach v in `r(varlist)' { 
    tempvar decoded diff 
    decode `v', gen(`decoded') 
    bysort `decoded' (`v') : gen `diff' = `v'[1] != `v'[_N] & !missing(`decoded') 
    count if `diff' 
    if r(N) > 0 local bad `bad' `v' 
    drop `decoded' `diff' 
} 

di "`bad'" 
+0

おかげでニック、私はこれまで最高の解決策としてこれをマークした。しかし、私は1000以上の変数を持つデータセットを持っています。これらの変数のそれぞれに対して、値ラベルを含む追加の変数を生成することが効果的かどうかはわかりませんが、パンダに転送するだけです。それらをより重要な変数に再アタッチすることができます。私は値のラベルを変更したいのですが、11はlabeld "oneone"、22はlabeld "twotwo"、または(私の例のように)11はlabeld "oneone or twowo(1)"、 ononeまたはtwotwo(2)」を参照してください。 –

+0

曖昧さを排除する方法については、「help numlabel」を参照してください。 –

+0

完璧な、私は "リピートバリューラベル"の話ではなく、 "曖昧さ"という言葉を使用していたはずです;-) –

1

(のStataで)私の最終的な解決策:

clear 

use "file.dta" 

*Find out which duplicated value labels there are 
labelbook, length(12) 

return list, all 

*r(nuniq) contains the not-unique-values 

*on all variables in r(nuniq) use the numlabels command 

numlabel `r(nuniq)', add 

*Look at the not unique value labels again: 
labelbook, length(12) 

return list, all 

save "file2.dta", replace 

はあなたにニックをありがとう!

decode multilabel, gen(valuelabel) 
label values multilabel 

、あなたが繰り返しラベルと変数を持っている場合は

関連する問題