2017-03-28 15 views
0

削除する行のリストを取得するためのループを作成しました。Pandas dfから行のリストを削除する

cols = [] 
for i in range(len(df)): 
    if i != len(df)-1: 
     if (df['Player'][i] == df['Player'][i+1]): 
      cols.append(i+1) 

今、私はcolsを通り、その番号で各行をドロップしたいと思います。私はこれらの行を削除するために、次のループを使用してみましたが、それは動作していません。ドロップ行について

+0

で、 'df.dropは()'、データフレームを返します。代わりにそれを修正するのではなく、 'inplace = True'引数を指定すると、あなたのコードはあなたが望むように動作するはずです。しかし、これを行うより良い方法があります。下の私の答えを参照してください。 –

答えて

1
for col in cols: 
    df.drop([[col]]) 

df.drop(rows,inplace=True) 

ドロップ列の場合:

df.drop(cols,axis=1,inplace=True) 

試験:

df = pd.DataFrame({'A':[1,2,3,4,5],'B':[1,2,3,4,5]}) 
print('DataFrame with initialised :\n',df,'\n') 
df.drop([2,4],inplace=True) 
print('DataFrame after dropping 2 rows:\n',df,'\n') 
df.drop(['B'],axis=1,inplace=True) 
print('DataFrame after dropping 1 column:\n',df,'\n') 

出力:

DataFrame with initialised : 
    A B 
0 1 1 
1 2 2 
2 3 3 
3 4 4 
4 5 5 

DataFrame after dropping 2 rows: 
    A B 
0 1 1 
1 2 2 
3 4 4 

DataFrame after dropping 1 column: 
    A 
0 1 
1 2 
3 4 
0

あなただけの鞍部に重複値を持つ行を削除したい場合は、「プレイヤー」、次のことができます。

df.drop_duplicates(subset=['Player'],inplace=True) 
+0

OPのように思えますが、ダップだけをドロップしたい!いいですよ。 –

+0

これはおそらくそうではありません。 OPは、 'Player'の重複した値の直前の行を削除したいと思うようです。 –

0

あなたがPlayerの重複値が先行する行を取り除くしようとしているように見えます。 pandasでは、常にベクトルで動作するようにしてみてください:Player内の各エントリが最後に等しいかどうかdf.Player == df.Player.shift()チェックので1行のソリューションは、デフォルトでは

df[df.Player != df.Player.shift()] 
関連する問題