Pandas快速教程_数据选取和索引

本文详细讲解了Pandas中数据选取和索引的各种方法,包括列(columns)和行(rows)的访问,随机抽样,标量获取与设置,Boolean索引,isin与where方法的使用,query方法,重复数据处理以及Index对象的操作。了解这些知识点对于高效使用Pandas进行数据分析至关重要。
摘要由CSDN通过智能技术生成

Pandas中Axis的标签(比如列标签,行标签)在数据分析,可视化等中非常的重要,数据对齐的功能也是基于标签实现的,正是这些标签可以让我们很便利的操作数据,比如选取数据或者构造数据的子集.这一章,我们将聚焦Pandas中的数据选取和索引.

一.列(columns)数据访问的方式和区别

首先,举个例子来介绍一下基本概念.

df = pd.DataFrame(np.random.randint(1,10, 8).reshape(4,2), index=list('abcd'), columns=['First', 'Secend'])

df
Out[19]: 
   First  Secend
a      7       7
b      6       9
c      2       9
d      2       7

访问df中列(columns)的数据有两种不同的方式,为每种方式规定了不同的名称.

操作符号[ ]的方式,被称为标准访问(standard)

操作符号 . 的方式,被称为属性访问(attribute)

这两种方式都可以访问到df的列数据,比如:

df.First
Out[24]: 
a    7
b    6
c    2
d    2
Name: First, dtype: int32

df['First']
Out[25]: 
a    7
b    6
c    2
d    2
Name: First, dtype: int32

这两种方式虽然都可以访问数据,但还是存在一些区别的.

1.属性访问的方式是不能增加或者创建新的列的数据的,而标准访问的方式是可以的

df.Three = list(range(len(df.index)))
__main__:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access

df['Three'] = list(range(len(df.index)))

df
Out[30]: 
   First  Secend  Three
a      7       7      0
b      6       9      1
c      2       9      2
d      2       7      3

2.属性访问的方式中,属性的命名(既列的名称)是有限制的,是不能和一些已经存在的函数名或者说关键字冲突的,即使真的存在这样的列名.而标准访问是不受此限制的.

#为df新增一列min数据作为演示
df['min']=0

df
Out[34]: 
   First  Secend  Three  min
a      7       7      0    0
b      6       9      1    0
c      2       9      2    0
d      2       7      3    0

df.min
Out[35]: 
<bound method DataFrame.min of    First  Secend  Three  min
a      7       7      0    0
b      6       9      1    0
c      2       9      2    0
d      2       7      3    0>

df['min']
Out[36]: 
a    0
b    0
c    0
d    0
Name: min, dtype: int64

二.行(rows)数据访问的方式和区别

行数据的有三种方式或者说方法:

loc 基于行标签(label)的访问

iloc 基于行位置的访问(position)

[ ] 标准方式中使用用range范围

除了标准方式只能接受range范围外,loc和iloc方法接受的可以是单一的label或position,也可以是多个label或position组成的列表,或者切片方式的range,还可以是boolean array ,甚至可以是callable函数.

需要注意的是,loc的切片方式是闭区间,比如a:c是包含c的,而iloc的切片是开区间,比如1:3是不包含3的.

df.loc['a':'c']
Out[45]: 
   First  Secend  Three  min
a      7       7      0    0
b      6       9      1    0
c      2       9      2    0

df.iloc[0:2]
Out[46]: 
   First  Secend  Three  min
a      7       7      0    0
b      6       9      1    0

df[:2]
Out[47]: 
   First  Secend  Three  min
a      7       7      0    0
b      6       9      1    0

首先来看看loc方法的一些特性.

loc进行boolean选择

 df
Out[51]: 
   First  Secend  Three  min
a      0       7      0    7
b      0       9      1    6
c      0       9      2    2
d      0       7      3    2

df.loc[:,df.loc['a']>0]
Out[52]: 
   Secend  min
a       7    7
b       9    6
c       9    2
d       7    2

仅对于loc的label索引,如果索引是由多个label组成的列表,而且列表中包含不存在的label, 那么目前0.23的版本虽然会返回结果,但将会提示错误.这时可以使用reindex方法代替.

df
Out[82]: 
   First  Secend  Three  min
a      0       7      0    7
b      0       9      1    6
c      0       9      2    2
d      0       7      3    2

df.loc[['a','f']]
__main__:1: FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
Out[83]: 
   First  Secend  Three  min
a    0.0     7.0    0.0  7.0
f    NaN     NaN    NaN  NaN

df.reindex(['a','f&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值