假设df
是一个完全由浮点数组成的Pandas数据帧。
我知道
df[df < 0] = 0
用{0}替换df
中的所有负值,但我会问一些不同的东西。我想知道我必须在表达式
f
df.apply(f)
...结果数据框在df
具有负数的位置处为零。
FWIW,以下因错误而失败:
df.apply(lambda x: max(x, 0))
......以下产生了错误的结果:
df.apply(lambda x: numpy.max(x, 0))
更一般地说,如何将非向量化,标量返回函数应用于数据帧 A 的每个单元格,从而生成一个与 A 形状相同的新数据框?
答案 0 :(得分:4)
这需要applymap,不适用:
df = pd.DataFrame(np.random.randn(4, 2))
df
Out:
0 1
0 1.157994 -0.729533
1 -1.062847 1.119744
2 -0.424534 -0.058468
3 0.465355 -0.838637
df.applymap(lambda x: max(x, 0))
Out:
0 1
0 1.157994 0.000000
1 0.000000 1.119744
2 0.000000 0.000000
3 0.465355 0.000000
答案 1 :(得分:0)
( NB:我接受了ayhan的答案,因为我发现它最终更有用,但严格来说,下面的答案更接近我实际要求的答案。)
import numpy as np
lambda x: np.maximum(x, 0)
注意: np.maximum
不应与np.max
混淆!
E.g。
import pandas as pd
df = pd.DataFrame(np.random.randn(4, 2))
df
# 0 1
# 0 0.065962 -0.146952
# 1 0.248722 0.529046
# 2 -1.027380 0.632114
# 3 0.928840 -0.188312
df.apply(lambda x: np.maximum(x, 0))
# 0 1
# 0 0.065962 0.000000
# 1 0.248722 0.529046
# 2 0.000000 0.632114
# 3 0.928840 0.000000