pandas 学习笔记04 基础操作 02 数据的信息、统计、选择

1.dataframe的基础信息和统计性信息。对series也适用。

#1 查看样本,eg:
df.head(10) #查看前10条信息
df.tail(10)  #查看后10条信息
df.sample() #随机查看一条
df.sample(3) #随机查看3条
#2 数据形状
df.shape 
s.shape
#3 基础信息 Series不支持。
df.info()
#4 数据类型,Series使用方法有区别
df.dtypes
s.dtype
#5 行列索引内容(列表形式)
df.axes 
#6 其他信息
df.index  #索引对象
df.columns #列索引,Series不支持
df.values#array(<所有值得列表矩阵>)
df.ndim #维度
df.size #行x列的总数,就是总共有多少数据
df.empty #是否为空,注意,有空值不认为空
df.keys() #Series的索引,DataFrame的列名
#s.keys()
#Series独有的方法
s.name
s.array
s.dtype
s.hasnans

2.统计计算

# 描述统计
df.describe() #返回数字列的统计信息总总数、平均数、标准差、最小值、四分位数、最大值等
#若没有数字,则会输出与字符相关的统计数据,如数量、不重复数、最大值等
df.name.describe()
#还可以自己指定分位数
#df.describe(percentiles=[0.5,0.25,0.75,0.95])
#df.describe(include=[np.object,np.number])
#df.describe(exclude=[np.object])

#数学统计
df.mean() #无数字列会报错
df.Q1.mean()
#接收axis参数,列index,或0,行columns 或1
df.mean(axis='columns')
df.mean(axis=1)
df.mean(1) #以上三种方法功能相同
#创建name索引
df.set_index('name').mean(1).head()

#统计函数
# df.mean() #返回所有数字列平均数
# df.mean(1)#返回所有数字行平均数
# df.corr()#返回列与列之间相关系数
# df.count() #返回每列中非空值得个数
# df.max()
# df.min()
# #df.Q1,.abs() #只能数字列,否则报错
# df.Q2.median() #返回列中位数,只能数字列,否则报错
# df.std() #标准差
# df.var() #无偏方差
# df.sem() #平均值标准误差
df.Q1.mode() #众数
#df.prod() #连乘,只能数字列,否则报错
df.mad() #平均值绝对误差
df.cumsum(axis=0) #累积连加
df.Q1.cumprod() #累积,只能数字列,否则报错
df.nunique() #去重数量,不同值的量
df.Q2.idxmax() #每列最大值得索引名,只能选择数字列,否则报错
df.Q1.idxmin()
df.Q1.cummax() #累积最大值
df.Q1.cummin()
df.skew() #样本偏度(第三阶)
df.kurt()#样本偏度(第四阶)
df.quantile()#样本分位数(不同%的值)


#一些特殊用法
df.mean(axis=1) #按行计算
df.sum(0,skipna=False) #不除缺失数据
# df.sum(level='blooded') #索引级别
df.sum(min_count=1) #执行累加的最小有效数值

#以上函数均有自己的一些特别的参数用于限制计算规则。可查看提升进行设置

3.非统计函数

#非统计计算
df.all() #返回所有列all()值得Series
df.any()

#四舍五入
df.round(2) #指定字段指定保留小数位
df.round({'Q1':2,'Q2':0})
df.round(-1) #保留10位

#每个列的去重值得数量
df.nunique() #去重值后的数量
s.nunique()

#真假检测
df.isna() #值得真假值替换
df.notna() #与上面相反

#可以传入一个值或另一个dataframe进行计算
# df.Q1+1#等运算
# df.add()#加
# df.sub()#减
# df.mul()#乘
# df.div()#除
# df.mod()#模,除后的余数
# df.pow()#指数幂
# df.dot(df2)#矩阵运算

#Series专有函数
#不重复的值及数量
s.value_counts()
s.value_counts(normalize=True) #重复值得频率
s.value_counts(sort=False) #不按频率排序

s.unique() #去重得值
#最大最小值
s.nlargest() #最大的前5个
s.nsmallest()#最小的前5个
s.pct_change()#计算与前一行的变化百分比
s.pct_change(2) #前两行
s1.cov(s2) #两个序列的协方差

4.位置计算

#df.diff()做位移差操作
df.Q1.diff() #后面与前面的差值
df.Q1.diff(-1) #后方向,移动两位求差值
df.loc[:5,'Q1':'Q4'].diff(1,axis=1) #只筛选4个季度的5条数据,计算每个学生每个季度较前一个季度成绩的变化值

#df.shift() 对数据进行移位,不做任何计算
df.shift() #整体下移一行,最顶行为NaN
df.shift(3) #移三行
df.shift(-1) #整体向上移动一行,最低一行为NaN
df.shift(axis=1) #整体向右移一行
df.shift(3,axis=1) #向右移三行

#rank()位置序号,可以将数据的排序值替换掉原来的数据值,支持对所有类型数据进行排序,英文按字母顺序
df.head().rank() #排名,将值变成了序号,按列排序
df.head().rank(axis=1) #按行排序
df.head().rank(pct=True) #pct参数可以将序列转化成0-1的数,以便知道数的位置

5.数据的选择

# 选择列:df[col]
# 按索引选择行:df.loc[label]
# 按数字索引选择行:df.iloc[loc]
# 使用切片选择行:df[5:10]
# 用表表达式选择行:df[bool_vec]

#选择列
df['name'] 
df.name #注意列名以数字开头或存在空格不能使用此方法

#切片,操作方法与python列表基本一致
df[:2] #前两行
df[4:10]#索引4-9行
df[:]#全部
df[:10:2]#步长为2
s[::-1]#反转顺序
# df[2] #报错
df[['name','Q1']]
#区别
df[['name']] #返回DataFrame对象
df['name'] #返回Serise对象

#按轴标签.loc,df.loc[<行表达式>,<列表达式>]
df.loc[0] #选择0的行,如果索引位字符型需加引号
df.set_index('name').loc['Ben'] #索引位Ben
#df.loc[[0,5,10]] #指定索引为0,5,10的行
df.set_index('name').loc[['Eli','Ben']] #两位学生,索引是name
df.loc[[False,True]*50]#为真得列显示,各一行显示一行

df.loc[0:5,['name','Q2']] #前5’行,name,Q2列
df.loc[0:10,'Q1':] #前10行,Q1列后边的所有列

#按数字索引.iloc,df.iloc[<行表达式>,<列表达式>]
df.iloc[0:3] #前三行
df.iloc[0:20:3] #步长为3
df.iloc[0:3,[0,1]] #前三行,前两列
df.iloc[:3,:-2] #从右往左第三列以左的所有列

#取具体值.at/.iat,类似loc,df.at[<索引>,<列名]
df.at[4,'Q1'] 
df.set_index('name').at['Ben','Q1'] #索引是21
df.at[0,'name']
df.loc[0].at['name'] #同上
df.set_index('name').at['Eorge','team'] #指定列的值对应其他列的值
df.set_index('name').team.at['Eorge'] #同上
df.team.at[3]

df.iat[4,2] #iat与at完全一样,iat只支持数字
df.loc[0].iat[1] 

#获取数据.getattr(o, name),dataframe需要传入列名
df.get('name',0) #是name列
df.get('nameXXX',0)#默认返回0
s.get(3,0) #Series返回具体的值
df.name.get(99,0) #ben
df.set_index('name').team.get('Ben') 

#数据截取.truncate
df.truncate(before=2,after=4) #截取索引2-4之间的数据

#索引选择器 pd.IndexSlice是一个专门的索引选择器
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]
#选择这部分区域加样式
df.style.applymap(style_fun,subset=idxs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值