NumPy和DataFrame索引问题总结

一,NumPy数组跟列表最重要的区别在于,数组切片是原始数组的视图

这意味着数据不会被复制,视图上的任何修改都会直接反映到源数据上。

如果你想要得到的是ndarray切片的一份副本而非视图,就需要显示地进行复制操作,例如arr[5:8].copy()

例子:

>>> import numpy as np
>>> arr = np.arange(10)
>>> arr[5:8] = 0
>>> arr
array([0, 1, 2, 3, 4, 0, 0, 0, 8, 9])

二,通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是如此。

例子:

>>> arr = np.arange(3)
>>> arr
array([0, 1, 2])
>>> arr > 1
array([False, False,  True], dtype=bool)
>>> arr[arr > 1] = 0
>>> arr
array([0, 1, 0])

竟然源数组改变了!原因尚不清楚。难道教材错了吗?明明是视图呀?

三,布尔型DataFrame索引是原始DataFrame的视图

例子:

>>> dt = pd.DataFrame(np.arange(16).reshape((4,4)))
>>> dt < 5
       0      1      2      3
0   True   True   True   True
1   True  False  False  False
2  False  False  False  False
3  False  False  False  False
>>> dt[dt < 5] = 0
>>> dt
    0   1   2   3
0   0   0   0   0
1   0   5   6   7
2   8   9  10  11
3  12  13  14  15

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值