2017-01-07 11 views
1

私はpython 3を使用していて、pdとしてpandasをインポートしていますが、要素がintのリストであるデータフレームdfを持っています。私は、データフレームの特定のセルのリストから要素を削除する関数を記述しようとしています。私が持っているものパンダのデータフレーム内の特定のセルについては、リストの要素を削除してください

は次のとおりです。私は、関数を実行すると

def eliminate(r,c,v): 
    '''for row r and column c eliminate value v''' 
    df[c][r].remove(v) 

は、しかし、それはすべてのセルのリストからVを削除します。ここで何がうまくいかないのか分かりません。

+1

FWIWは、一般的に、より良いパンダのデータフレーム内のリストを格納することがありません。例えば。整数の列の列は、整数の追加の行および/または列に良好に編成される。あなたのコードは、ほとんどの場合、より速く簡単です。 – JohnE

答えて

2

あなたが選択するためのlocを使用してcrを入れ替えることができます。

def eliminate(r,c,v): 
    '''for row r and column c eliminate value v''' 
    df.loc[r, c].remove(v) 
    return df 

サンプル:

df = pd.DataFrame({'A':[[1,2,3],[3,4]], 
        'B':[[4,5],[6, 3]]}) 

print (df) 
      A  B 
0 [1, 2, 3] [4, 5] 
1  [3, 4] [6, 3] 

def eliminate(r,c,v): 
    '''for row r and column c eliminate value v''' 
    #another solution 
    #df.loc[r, c] = [x for x in df.loc[r, c] if x != v] 
    df.loc[r, c].remove(v) 
    return df 

print (eliminate(0,'A',2)) 
     A  B 
0 [1, 3] [4, 5] 
1 [3, 4] [6, 3] 

print (eliminate(1,'B',3)) 
     A  B 
0 [1, 3] [4, 5] 
1 [3, 4]  [6] 
+1

私は分かりません。 OPがそうでない場合、なぜこのコードは機能しますか? OPがフレーム内の同じリストに複数の参照を入れた可能性は高いですか? – DSM

+0

@DSM - 私はそれをテストし、あなたは正しいです。たぶんタイプの問題?私は 'OP 'からのフィードバックをまだ得ていない。 – jezrael

+0

@DSM - たぶんOP忘れる 'return df' – jezrael

関連する問題