2017-04-12 5 views
0

私はいくつかの列とインデックスを持つデータフレームを持っています。値が正の場合は1、それ以外の場合は-1を置き換えます。ここ
は、私はそれを実行しようとしました方法ですが、それは失敗し、私は番目のefollowingエラーがあります。データフレームのすべての値に条件文を適用する

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

同じエラーが、私は助け読ん1のどれも他の多くの記事があります。 [numeric_cols] DF1

 numeric_cols = [col for col in df1 if df1[col].dtype.kind != 'O'] 
     if df1[numeric_cols] > 0: 
      df1[numeric_cols] = 1 
     else: 
      df1[numeric_cols] = -1 

答えて

1
と同様に

.applyが非常に遅くなるだろう。

df = pd.DataFrame([[1,2,3],[1,5,2],[2,3,1]]) 
print df 

    0 1 2 
0 1 2 3 
1 1 5 2 
2 2 3 1  

df[df<3]=0 
df[df>=3]=1 

print df 

    0 1 2 
0 0 0 1 
1 0 1 0 
2 0 1 0 
0

は、データセット内のあなたのすべての行のnumeric_colsを与え、あなたが行ごとにデータを見ていない:

は、ここに私のコードです。

df1[numeric_cols] = df1[numeric_cols].apply(lambda x : 1 if x > 0 else -1) 

が有効です。 Replace an entry in a pandas DataFrame using a conditional statement

関連する問題