Pandas数据分析05——数据框的位置平移、差分,排序和切片

pandas数据框对象,根据索引取出自己需要的数据对象的一系列方法。


import pandas as pd 
import numpy as np
df = pd.read_excel('https://www.gairuo.com/file/data/team.xlsx')
df=df[df.columns[2:]]

差分

# 本行与前一行的差值(即当前值比上一行增加了多少),无前一行的本行值为 NaN
df.diff()
df.diff(axis=1) # 向右一列
df.diff(2)
df.diff(-1)    # 新的本行为本行减去后一行

位置移动

# 整体下移一行,最顶的一行为 NaN
df.shift()
df.shift(3) # 移三行
df.Q1.head().shift(-1)# 整体上移一行,最底的一行为 NaN
df.shift(axis=1)# 向右移动一位
df.shift(3, axis=1) # 移三位
df.shift(-1, axis=1)# 向左移动一位
# 实现了 df.Q1.diff()
df.Q1 - df.Q1.shift()

排名

# 排名, 将值变了序号数
df.rank()
df.rank(axis=1) # 横向排名
# 相同值的排名处理:
# method='average' 并列第1 计算(1+2)/2=都是1.5,下个是3
# method='max':并列第1,显示2,下个 3
# method='min':并列第1,显示1,下个3
# method='dense':并列第1,显示1,下个 2
# method='first':按索引顺序看谁在索引前
df.Q1.rank(method='max')
df.rank(na_option='bottom') # 把空值放在最后
df.rank(pct=True) # 以百分比形式返回

数据选择


切片

df = pd.read_excel('https://www.gairuo.com/file/data/team.xlsx')
#选一列
df['name'] # 会返回本列的 Series
df.name
type(df.Q1)#Series
df[['Q1', 'Q2']] # 选择两列
df[['name']] # 选择一列,返回 DataFrame,注意和上例区别
#选行
df[:2] # 前两行数据
df[4:10]
df[:] # 所有数据,一般没这么用的
df[:10:2] # 按步长取
s[::-1] # 反转顺序
ser['c':'g']# 按标签切片,包含右边

loc切片

# 切行索引,如果是字符需要加引号
df.loc[0] # 选择索引为 0 的行
df.loc[8:10]   #8到10行
df.loc[[0,5,10]] # 指定索引 0,5,10 的行
df.loc['2010':'2014'] # 如果索引是时间可以用字符查询
df.loc[['Eli', 'Ben']] # 如果索引是 name
# 真假选择,长度要和索引一样
df.loc[[False, True]*50] # 为真的列显示,隔一个显示一个
##行列一起切
dft.loc[0:9, ['Q1', 'Q2']] # 10行,Q1 和 Q2两列
dft.loc[:, ['Q1', 'Q2']] # 所有行,Q1 和 Q2两列
dft.loc[:10, 'Q1':] # 0-10 行,Q1后边的所有列

iloc切片

#df.iloc 与 df.loc 相似,但只能用自然索引(行和列的 0 - n 索引),不能用标签。
df.iloc[:3]  #前三行
s.iloc[:3]
df.iloc[:]   #所有行
df.iloc[2:20:3] #步长为3
df.iloc[:, [1, 2]]   #所有行,1、2列
df.iloc[:3,:-2]  #第三列以左,第四行以上

取具体值 .at

#取一个点的值
# 注:索引是字符需要加引号
df.at[4, 'Q1'] # 65
df.at['lily', 'Q1'] # 65 假定索引是 name
df.at[0, 'name'] # 'Liver'
df.loc[0].at['name'] # 'Liver'
# 指定列的值对应其他列的值
df.set_index('name').at['Eorge', 'team'] # 'C'
df.set_index('name').team.at['Eorge'] # 'C'
# 指定列的对应索引的值
df.team.at[3] # 'C'
#同样 iat 和 iloc 一样,仅支持数字索引:
df.iat[4, 2] # 65
df.loc[0].iat[1] # 'E'

get

##.get 可以做类似字典的操作,如果无值给返回默认值(例中是0)
df.get('name', 0) # 是 name 列
df.get('nameXXX', 0) # 0, 返回默认值
s.get(3, 0) # 93, Series 传索引返回具体值
df.name.get(99, 0) # 'Ben'

数据截取器

df.truncate(before=2,after=4)  #等于df.iloc[2:5,:]

索引选择器

#pd.IndexSlice 的使用方法类似于df.loc[] 切片中的方法,常用在多层索引中,以及需要指定应用范围(subset 参数)的函数中,特别是在链式方法中。
df.loc[pd.IndexSlice[:, ['Q1', 'Q2']]]
# 变量化使用
idx = pd.IndexSlice
df.loc[idx[:, ['Q1', 'Q2']]]
df.loc[idx[:, 'Q1':'Q4'], :] # 多索引
# 创建复杂条件选择器
selected = df.loc[(df.team=='A') & (df.Q1>90)]
idxs = pd.IndexSlice[selected.index, 'name']
df.loc[idxs]# 应用选择器

猜你喜欢

转载自blog.csdn.net/weixin_46277779/article/details/126059504