python填充中数_python – 在给定条件的情况下在numpy数组中填充值

本文介绍如何利用Pandas库在遇到0值的numpy数组中填充上一个非0值,特别是针对第一列的数据处理。示例中展示了如何创建一个DataFrame,将0替换为NaN,然后使用ffill()方法进行前向填充,最后用fillna(0)将NaN替换为0,从而实现所需效果。
摘要由CSDN通过智能技术生成

目前我有一个数组如下:

myArray = np.array(

[[ 976.77 , 152.95 , 105.62 , 53.44 , 0 ],

[ 987.61 , 156.63 , 105.53 , 51.1 , 0 ],

[1003.74 , 151.31 , 104.435, 52.86 , 0 ],

[ 968. , 153.41 , 106.24 , 58.98 , 0 ],

[ 978.66 , 152.19 , 103.28 , 57.97 , 0 ],

[1001.9 , 152.88 , 105.08 , 58.01 , 0 ],

[1024.93 , 146.59 , 107.06 , 59.94 , 0 ],

[1020.01 , 148.05 , 109.96 , 58.67 , 0 ],

[1034.01 , 152.69 , 107.64 , 59.74 , 0 ],

[ 0. , 154.88 , 102. , 58.96 , 0 ],

[ 0. , 147.46 , 100.69 , 54.95 , 0 ],

[ 0. , 149.7 , 102.439, 53.91 , 0 ]]

)

我想在第一列中用前一个最后一个值(1034.01)填充零,但是如果0从索引0开始,则保持为0.

最终结果示例:

myArrayEnd = np.array(

[[ 976.77 , 152.95 , 105.62 , 53.44 , 0 ],

[ 987.61 , 156.63 , 105.53 , 51.1 , 0 ],

[1003.74 , 151.31 , 104.435, 52.86 , 0 ],

[ 968. , 153.41 , 106.24 , 58.98 , 0 ],

[ 978.66 , 152.19 , 103.28 , 57.97 , 0 ],

[1001.9 , 152.88 , 105.08 , 58.01 , 0 ],

[1024.93 , 146.59 , 107.06 , 59.94 , 0 ],

[1020.01 , 148.05 , 109.96 , 58.67 , 0 ],

[1034.01 , 152.69 , 107.64 , 59.74 , 0 ],

[1034.01 , 154.88 , 102. , 58.96 , 0 ],

[1034.01 , 147.46 , 100.69 , 54.95 , 0 ],

[1034.01 , 149.7 , 102.439, 53.91 , 0 ]]

)

我希望代码适用于任何阵列,而不仅仅是这个,情况可能会有所不同. (第3列可能全为0,第4列可能在中间有0,应填充最后一个值).

最佳答案 这是一个带有熊猫的矢量化方式. numpy也可以这样做.在任何情况下,您都不需要显式循环来执行此任务.

import pandas as pd

import numpy as np

df = pd.DataFrame(myArray)\

.replace(0, np.nan)\

.ffill().fillna(0)

res = df.values

print(res)

[[ 976.77 152.95 105.62 53.44 0. ]

[ 987.61 156.63 105.53 51.1 0. ]

[ 1003.74 151.31 104.435 52.86 0. ]

[ 968. 153.41 106.24 58.98 0. ]

[ 978.66 152.19 103.28 57.97 0. ]

[ 1001.9 152.88 105.08 58.01 0. ]

[ 1024.93 146.59 107.06 59.94 0. ]

[ 1020.01 148.05 109.96 58.67 0. ]

[ 1034.01 152.69 107.64 59.74 0. ]

[ 1034.01 154.88 102. 58.96 0. ]

[ 1034.01 147.46 100.69 54.95 0. ]

[ 1034.01 149.7 102.439 53.91 0. ]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值