我有一个包含多个列和索引的数据框,如果值为正,我想将每个值替换为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
答案 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类似