2017-10-13 1 views
1

work3というデータセットがあり、 'clean_name'列に基づいて重複する行を削除しようとしています。dataset.drop_duplicates()はValueErrorを返します:渡されたアイテムの数が間違っていますが、サンプル(frac = 1)はありません

work3.info() 

出力::以下はWORK3に関する情報である

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 3295520 entries, 0 to 3330947 
Data columns (total 4 columns): 
id   int64 
name   object 
address  object 
clean_name object 
dtypes: int64(1), object(3) 
memory usage: 276.7+ MB 

と私はdrop_duplicatesをしようとすると、それはValueErrorを私にもたらします:

work3.drop_duplicates(['clean_name']) 

出力:

ValueError: Wrong number of items passed 2117463, placement implies 3295520 

今、私はそれを試そうとするが、frを作るAC = 1、データセット全体を取り、その後情報をチェックする:

test = work3.sample(frac=1) 
test.info() 

出力:

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 3295520 entries, 419298 to 978722 
Data columns (total 4 columns): 
id   int64 
name   object 
address  object 
clean_name object 
dtypes: int64(1), object(3) 
memory usage: 125.7+ MB 

..theメモリ使用量は同じくらい約半分です! 276.7+ MBの代わりに125.7+ MB。さらに重要なこと 、私はそれにdrop_duplicates機能を実行します。

test.drop_duplicates(['clean_name')) 

それは私がエラーなしで欲しいものを私に与えます!私はここに何かを逃していますか

2117463 rows × 4 columns 

を要約すると、ここに私の質問は以下のとおりです。

  1. はなぜメモリ使用量は、それがまったく同じデータセットのにもかかわらず、半減しましたか?

  2. なぜ、サンプルtest.drop_duplicates()はエラーなく動作しますが、元のデータセット3は、ValueErrorを与えてくれますか?

答えて

1

インデックスが重複している可能性があります。このエラーは、.sampleを使用したときにスローされることはありません。これは、データフレームのインデックスが再作成されるためです。再インデックスファースト:

work3.reset_index(drop=True).drop_duplicates(['clean_name']) 
関連する問題