Python之DataFrame切片与索引实验

原文链接:https://zhuanlan.zhihu.com/p/84885215

创建2个DataFrame,一个没有行列命名,一个有行列名。来进行常规切片、loc/iloc索引、布尔索引的对比试验。

1.使用Numpy和pandas创建两个DataFrame

之前别忘了导入Numpy和pandas库。

df1 = pd.DataFrame(np.random.randn(5, 5))
#创建一个DataFrame,但不给行和列命名

df2 = pd.DataFrame(np.arange(20).reshape(4, 5), index=list('ABCD'), columns=list('OPQRS'))
#创建一个DataFrame并给行和列命名

打印出来看下效果:

df1:行和列没有命名

df2:行和列有命名

2.使用[]和数字

df1[2]

df1[2]

df2[2]

df2[2]

可以看到df1[2]获取的是第3列的数据,df2[2]却报错了。说明[]+数字获取的是列值,但遇到有列名的情况就会报错。

3.使用[]和列表

df1[[0, 2]]

df1[[0, 2]]

df2[[0, 2]]

df2[[0, 2]]

df1[[0, 2]]获取的是第1和第3列的数据,df2[[0, 2]]报错。说明[]+列表是通过列名获取多列值。

3.使用[]和:

df1[1:4]

df1[1:4]

df2[1:4]

df2[1:4]

df1和df2都可以获取。而且获取的数据都是第2,3,4行的数据。说明[]+:是通过列位置获取数据。

4.使用loc

#df.loc 通过标签索引行或列数据

df1.loc[[0, 1], :]

df1.loc[[0, 1], :]

df2.loc[['A', 'C'], :]

df2.loc[['A', 'C'], :]

loc的[]包含的是行或者列的标签名,通过:隔开,可选择多行多列。

loc只针对已经命名行列的DataFrame有效,通过位置切片需要用到iloc。

5.使用iloc

#df.iloc通过位置获取行数据 iloc --> index location

df1.iloc[[0, 1], [1, 2]]

df1.iloc[[0, 1], [1, 2]]

df2.iloc[[0, 1], [1, 2]]

df2.iloc[[0, 1], [1, 2]]

iloc通过位置来获取数据,通过:隔开,可选择多行多列。

5.使用布尔索引

从df1中获取介于-0.9和0.9之间的数

df1[df1.abs() < 0.9]

df1[df1.abs() &lt; 0.9]

获取df2中的奇数

df2[df2 % 2 == 1]

df2[df2 % 2 == 1]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值