Python的pandas模块索引与数据选择

Python的pandas模块索引与数据选择

文章哪里总结的不全面或者有疏忽出错的地方,请指出,谢谢!

对于入手Python机器学习和数据分析的新手来说,pandas是必须要学习的相关模块之一。其中最让人觉得比较乱的一个是索引的选取,另一个是axis轴向的问题。这篇文章先讲述数据选取的解决思路,以后再写axis轴向的问题。

笼统的说,pandas的数据选取体现在4个方面:选择列;选择行;选择一片区域;选择一个单元格的具体数据。

本文用以下DataFrame实例对象df做例子:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(6,5),index = list('abcdef'),columns=list('ABCDE')) //创建dataframe对象df

并不想以“把可以选择行列,区域,单元格的样例代码分类汇总” 这样的方式去总结,首先要明确pandas常用的有三类选择数据的套路:

第一类:

df[ ]:
①:如果中括号内写的是一个索引名,那么这个索引只能是列索引。那么当然,对应的也是一列。如果觉得说的不清楚,看代码就行了。

df['A'] # 选取的是A这一列。
df[['A','B']] # 选取的是A,B两列。

②:如果中括号内写的是行索引切片的形式或者是一个元素数等于行数的True 、False列表,那么对应的索引是行索引,选取的是行(写True 、False列表的话,列表元素最多就是df的行数,否则报错。所以不存在用True 、False列表选择列的情况)。如果写的是切片,那么选中的就是行。

df['a':'c'] # 选取的是a,b,c这三行。
df[0:3]  # 选取的是a,b,c这三行。
df[[True,True,True,False,False,False]] # 布尔值列表长度要等于行数。选取的是a,b,c这三行。
df[df['A']>0] # df['A']>0本质是一个bool列表。选取的是A列的值大于0的所有行。
df[(df['A']>0) | (df['B']>0)] # A列值大于0,或者B列大于0的行。括号必须要写。
df[(df['A']>0) & (df['C']>0)] # A列值大于0,并且C列大于0的行。括号必须要写。

df[ ]中括号内不能有逗号,比如这样:df[‘a’,‘A’]
df[[‘a’,‘b’,‘c’],[‘A’,‘B’]] 是不正确的。df后面只能是切片,列表,你自己写的列名(就是不能用默认索引0,1,2,3这样的,除非你写的就是0,1,2,3…)

第二类:

df.loc[ ]df.iloc[ ]
两个选择的都是行。df.loc[ ]是按照自己规定的行索引来选,本例中就是abcdef;df.iloc[ ]是按照默认索引来选,即0、1、2、3… 。

df.loc['a'] # 第一行
df.iloc[0] # 第一行
df.loc[:,'A':'D'] # 所有行的ABCD四列
df.loc['a':'c',:] # abc三行的所有列
df.loc['a','A'] # 第一行,第一列的数据(一个单元格)
df.iloc[00] # 第一行,第一列的数据(一个单元格)
df.iloc[:,0:3] # 所有行的前三列
df.iloc[:,[0,4]] # 所有行的第1列和第3列
df.loc['a':'c','A':'D'] # ABCD四列对应的abc三行(一个区域)
df.loc[df['A']>0,:] # A列大于0的行对应的所有列的值。
df.loc[df['A']>0,'B'] # A列大于0的行对应的B列的值。写成(df.loc[df['A']>0,'B']=1)可以直接修改原表满足前述条件的值为1。
                      #当初处理泰坦尼克号数据集时需要将性别数字化,就可以这样写:Titanic.loc[Titanic['Sex']=='Male','Sex']=1。
# 注意:写成这样是不对的:df.iloc[df['A']>0,:]   df.iloc[df['A']>0,'B']
df.loc[:, [True,True,True,False,False]] # 前三列(布尔数组长度等于列数)
df.loc[:, df.loc['a']>0]          # a行大于0的列
df.loc[:, df.iloc[0]>0]           # 0行大于0的列
第三类:

df. at[ ]和df.iat[ ]
两个都是精确定位单元格的意思。at和iat的区别等同于loc与iloc的区别。自行体会即可。

df.at['a','A'] # a行A列的数据
df.iat[0,0] # a行A列的数据

如果发现有其他常用用法将继续补充。欢迎纠错,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值