python - Pandas 用 np.nan 替换前几个 0

标签 python pandas

我正在尝试用 np.nan 为每一列替换 DataFrame 的第一个连续的 0。例如,我要转换:

pd_tmp_start = pd.DataFrame([[0,0],[0,0.3],[1.2,0.4],[0,0]])
print pd_tmp_start

     0    1
0  0.0  0.0
1  0.0  0.3
2  1.2  0.4
3  0.0  0.0

pd_tmp_target = pd.DataFrame([[np.nan,np.nan],[np.nan,0.3],[1.2,0.4],[0,0]])
print pd_tmp_target

     0    1
0  NaN  NaN
1  NaN  0.3
2  1.2  0.4
3  0.0  0.0

所以,我要做的是

pd_tmp_start[pd_tmp_start.cumsum()==0] = np.nan

虽然它有效。但是,我收到了警告

/home/myname/anaconda2/lib/python2.7/site-packages/ipykernel/main.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

知道这样做的正确方法是什么吗?谢谢。

编辑:由于某种原因,前面的代码没有输出警告,但是当我处理复杂的 Dataframe 并执行 pd_tmp_start[pd_tmp_start().cumsum()==0] = np.nan

弹出警告....

最佳答案

让我们使用cumprodmask:

pd_tmp_start.mask(pd_tmp_start.eq(0).cumprod().astype(bool))

输出:

    0    1
0  NaN  NaN
1  NaN  0.3
2  1.2  0.4
3  0.0  0.0

更新以下评论:

pd_tmp_start.mask(pd_tmp_start.eq(0).cumprod().astype(bool),-9876)

输出:

        0       1
0 -9876.0 -9876.0
1 -9876.0     0.3
2     1.2     0.4
3     0.0     0.0

关于python - Pandas 用 np.nan 替换前几个 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059225/

相关文章:

python - 如何使用 PyKalman 获得标准差?

python - 在Python中清除缓存或内存

python - 绘制直方图以找出图像上梯度的最大强度

python - 将 Flask-security 实例导入我的 View 模块会破坏我的 webapp

python - Pandas 放大多维物体

python - 创建复杂的条件列(几何平均数)Python

Python fstring 作为函数

python - 字典每个键分为多行

python - DataFrame 操作函数/方法

python - Pandas groupby - 计算与相对点的距离