一、转置:T函数
df.T
二、排序:sort函数
数据框排序:
df.sort_values(by = '编号')
数组排序:
df.编号.sort_values() ##区别:这个只显示对应列
降序:(默认是升序)
df.sort_values(by = '编号',ascending = False)
多列排序:
df.sort_values(['编号','网站情况'] ,ascending = False)
三、排名赋值:rank函数
df['rank']=df.编号.rank()
有一个特殊情况: 数值一样的话,排名可以按照不同的方式排列,可以在method参数配置不同的值
df['rank']=df.编号.rank(method='min')
min表示最小值,也是我们日常见到的
max最大值
默认是平均值
first不考虑并列情况,按照顺序排序
四、查重复值:unique函数,结果显示的唯一值
针对的是数组级别
df.网站情况.unique()
五、对重复计数value_counts()
针对的是数组级别
df.网站情况.value_counts()
六、描述统计describe()
针对数值
df.describe()
指定某一列
df.编号.describe()
所以还可以是这样的函数,min,max,mean
df.max()
分析师好的习惯,拿到数据:
df.info()→df.head()→df.describe()
七、累加函数cumsum()
这个函数的功能是返回给定axis上的累计和
df['cumsum']=df.编号.cumsum()
八、分段函数cut(),按照指分
df['cut']=pd.cut(df.编号,bins=4,labels=list('abcd'))
bins代表等分个数,labels表示别名,比如20-30岁少年
###不等分:
df['bin']=pd.cut(df.编号,bins=[0,500,1000,2000])
分为法分段函数pd.qcut(),按照排名分
数据聚合(与sql中的group by类似)
一、groupby()
###max()最大值,还可以是avg等
df.groupby(by = '网站情况').max()
###指定某列:
df.groupby(by = '网站情况').编号.max()
###多个字段分组,结果是多重索引
df.groupby(by = ['网站情况','名称']).编号.max()
###k[0],k[1]分别表示元组和数据框
for k in df.groupby(by = '网站情况'): print(k) 结果是一个元组,每个值是一个数和一个数据框
for k in df.groupby(by = '网站情况'): print(k[1])
###分组后最大值与最小值的差值
for k,v in df.groupby(by = '网站情况'):
print(max(v.编号)-min(v.编号))
多表关联
三种关联函数
一、concat(类似于堆叠,类似于sql 的union)
应用场景:表1:1月份销售明细;表2:2月份销售明细,则可以进行拼接
参数:objs是[a,b]
axis=1 是左右拼接,默认为0是上下拼接
两张表放在一起,字段合并
二、join(针对的是索引)
如果是针对的某一列关联,用merge
多表索引不一致,关联后数据错误,一般用在时间索引等
三、merge(根据介质,也就是某一列)
1、直接数据框使用merge
df.merge()
right是右边,on参数是当两张表的关键字段名一样时,当两张表关联字段名不一样时使用right_on=,left_on
2、pd.merge()
这里多出来一个left参数
多重索引
一、groupby的多重索引切片
关键点:serise级别可以直接输入索引标签进行切片查询
###第一步得出来是数据框形式
df.groupby(by = ['网站情况','编号']).mean()
###第二步等出来结果是Serise
df.groupby(by = ['网站情况','编号']).mean().rank
###第三步对Serise形式数据进行筛选
df.groupby(by = ['网站情况','编号']).mean().rank ['未嵌码']
注意:数据框下多重索引需要使用loc
df.groupby(by = ['网站情况','编号']).mean().loc['网站打不开']
二、多重索引的变化
1、set_index():列名变成索引
df.sort_values(by=['网站情况','编号']).set_index(['网站情况','编号'])
2、reset_index()索引变成列
df.groupby(by = ['网站情况','编号']).mean().reset_index(['网站情况','编号'])
文本函数
str()函数
针对的是这个表格进行操作(也就是字符串)
df.网站情况.str[-1,1]
replace()函数也是针对表格的具体值替换
当需要针对值里的某个字符替换时,则还需要套用一个str()函数
df.网站情况.str.replace('未','没有')
去重函数
1、空值填充fillna
某个值为空值
df.loc[df.名称 == '扶贫办','名称'] = np.NaN
###指定某一列的空值填充
df.名称=df.名称.fillna('abc')
###整个数据框的空值填充
df = df.fillna('abc')
2、空值行删除
df.dropna()
3、删除重复元素
###判断是否有重复值
df.duplicated()
###索引每一列是否有重复值
df[df.duplicated()]
###去除重复后的数据框
df[~df.duplicated()]
drop_duplicates() 直接返回数据
apply函数(自定义函数应用到列或者行)
1、对某个列
输入:df.编码的每一行
输出:按照匿名函数lambda x:str(x)+'k'输出
df.编号.apply(lambda x:str(x)+'k')
等价于
def func(x):
return str(x)+'k'
df.编号.apply(func)
2、对整个数据框:
axis=0表示应用函数多每个列
axis=1表示应用函数多每个行
3、apply应用在聚合函数
不同网站情况编号排名前3的
def func(x):
r = x.sort_values('编号',ascending=False) return r[:3]
df.groupby('网站情况').apply(func)
自定义取前几个:
def func(x,n):
r = x.sort_values('编号',ascending=False)
return r[:n]
df.groupby('网站情况').apply(func,n=3)
4、agg函数
df.groupby('网站情况').agg('mean')
等价于
df.groupby('网站情况').mean()
agg可以进行多个函数计算:
df.groupby('网站情况').agg(['mean','sum'])
数据透视表函数pivot_table
df.pivot_table(index= '网站情况',columns='名称',values='编号')
1、某个字段计算某个函数,使用字典:介质对
df.pivot_table(index= '网站情况',columns='名称',values=['编号','序号'],aggfunc={'编号':np.mean,'序号':len})