2017-11-30 11 views
0

私は今2日間処理していて問題があります。また、StackOverflowでのドキュメントと同様の質問に対する回答を読んだとしても、解決策はありません。パンダのデータフレームに行をドロップする

私は質問のペアを持つデータセットを持っていますが、私は重複してラベルを付けるべきですか。トレーニングデータセットで、私はクリーニングとベクトル化を実装しました - word2vec。残念なことに、一部の行では、word2vecはクリーニング後に単語を持たないため、emply value(nan)を返します。

私はこの行を削除しようとしていますが、単純に機能しません。

LEN = len(train1) 
print("Innitial lenght: ") 
print(len(train1)) 
print("Empty rows: ") 
for i in range(0, LEN): 
    if ((type(train1['q1_vec'][i]) != np.ndarray) or (type(train1['q2_vec'][i])!= np.ndarray)): 
     print(i) 
     train1.drop(train1.index[i]) 
print("Lenght after cleaning") 
print(len(train1)) 

私は結果を得た:

Innitial lenght: 
    258528 
Empty rows: 
    29296 
    59523 
    80284 
    ... 
    219103 
Lenght after cleaning 
    258528 

私が何かを落としていないと私は距離の任意の関数を適用することができないことを意味し、そのようscipy.spatial.distance.euclideanなどなど

私はラムダ関数を試してみましたが、成功しなかった。

train1['euclidean'] = train1.apply(lambda row: dist.euclidean(row['q1_vec'], row['q2_vec']) if ((type(row['q1_vec']) == np.ndarray) or (type(row['q2_vec']) == np.ndarray)) else None, axis=1) 

お勧めはありますか?

+0

'train1.drop(train1.index [i]、inplace = True)'を使用しようとしましたか?操作がインプレースになっているはずがない場合、PandasはDataFramesのコピーを作成します。 – Mephy

+0

この場合、[この質問](https://stackoverflow.com/questions/43667979/pandas-drop-function-not-working-in-a-for-loop)の複製としてマークすることができます。 。両方の答えが問題を解決するでしょう。 – Mephy

+0

ループ中にインデックスが崩れます。それは行を削除した後、 "KeyError:29296L"というエラーを出します。 – melania

答えて

0

パラメータinplace=trueを使用すると、レコードをインラインで削除するのに役立ちます。例:

関連する問題