2017-11-20 13 views
2

私はユニークな値を持つパンダシリーズを持っていますが、何とかset(またはpd.unique())を使用すると小さなオブジェクトが返されます。重複値のないパンダシリーズでセットを使用すると、より小さなオブジェクトが返されます

In [255]: titles.shape 
Out[255]: (77767,) 

In [256]: len(set(titles)) 
Out[256]: 77750 

In [257]: titles.nunique() 
Out[257]: 77750 

さらに検討している間、私は重複がお互いにいくつかの類似点を共有するようsetが見ているものことを見出したが、彼らは、実際の重複はありません。

In [254]: titles[titles.duplicated()] 
Out[254]: 
927892       Sham (film) 
945686      Shalom in the Home 
947578       Sham (play) 
4380452    Blind Spot (1958 film) 
4390747    Blind Spot (1932 film) 
4403857      Blind Rage (film) 
4406443     Blind Witness (film) 
4421728       Blind Terror 
4424566    Blind Spot (1947 film) 
4435819       Blind Wives 
4441354       Blind Youth 
4452296    Blind Side (1993 film) 
4629350     Ports of Call (film) 
5562561     Great Day (1945 film) 
5586514    Great Day in the Morning 
5634649 Great Continental Railway Journeys 
5640835   Great Day (unfinished film) 
Name: Title, dtype: object 

正確にはこの奇妙な問題を引き起こしますか?同じ最初の単語を持つタイトルエントリは、setによって重複と見なされます。 Wikipediaのデータセットを使ってこれらの映画のタイトルを抽出しているので、最初の単語が同じであるエントリが多くなければなりません。しかしここでは、これらの17のタイトルだけを見ています。

In [265]: title_list = list(titles) 

In [266]: len(title_list) 
Out[266]: 77767 

In [267]: title_list = [i.split()[0] for i in title_list] 

In [268]: len(set(title_list)) 
Out[268]: 17696 

EDIT2: 質問への回答が成功したため、データへのリンクが削除されました。

+0

あなたは私たちのタイトルデータを提供することができますか? – MikiBelavista

+0

どのように提供することを意味しますか? – dmarkos

+0

ウェブのどこかに置いてください。 – MikiBelavista

答えて

2

は、簡単な例を作ってみましょう:

check = pd.Series([1,2,2,3,4,2]) 
check[check.duplicated()] 
#2 2 
#5 2 
dtype: int64 

だから、これは最初のインスタンスO/W重複を示しています。

正しいアプローチは、次のようになります。

check[check.isin(check[check.duplicated()])] 
#1 2 
#2 2 
#5 2 
+0

ああ、間違ってシリーズに重複がないと思った。訂正してくれてありがとう。 – dmarkos

関連する問題