将条件语句应用于数据帧的所有值

时间:2017-04-12 19:15:41

标签: python pandas if-statement dataframe

我有一个包含多个列和索引的数据框,如果值为正,我想将每个值替换为1,否则为-1。 这是我尝试这样做的方法,但它失败了,我有以下错误:

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

还有很多其他帖子都有相同的错误,但我读过的帖子都没有帮助。

这是我的代码:

        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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

df1 [numeric_cols]为您提供数据集中所有行的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类似