Pandas是基于Numpy的专业数据分析工具,可以灵活高效地处理各种数据集,包含两种类型的数据结构:DataFrame(表)和Series(列) 。
pandas:字典+列表
df = pd.DataFrame({‘姓名’:[‘张三’,’李四’],’年龄’:[’11’,’22’]},index = [‘分类1′,’分类2’])
可以通过改变columns,index和values的值来控制数据。不指定索引时,从0开始的数字索引。
1.内容预览:df.head() 默认前5行 df.tail() 默认后5行
2.格式查看,缺失情况:df.info()
3.统计信息概览:df.descibe() 计算数值型数据的关键统计指标:如平均数,中位数,标准差等
4.列的基本处理方式
(1)增加一列,df[‘新列名’] = 新列值的形式
(2)删除一列,df.drop(‘新增的列’,axis = 1,inplace = True) axis = 1表示针对列的操作,inplace为True,则表示直接在源数据上进行修改,否则保持原样。
(3)选择一列,df[‘列名’],多列用列表传递 df[[‘第一列’,’第二列’,’第三列’]]
(4)改 df[‘旧列名’] = 某个值或者某列值
5.常用的数据类型以及操作
(1)字符串
df[‘原列名’] = df[‘列名’].str.replace(‘-‘,”)
(2)数值型 直接做运算 不是则需要转化 .astype(float)
(3)时间类型
一般pandas会将excel中时间类型读入成字符串,用to_datetime(str)转化即可
6.索引
(1)位置索引 df.iloc[行索引,列索引] df.iloc[:13,:] 表示0-12行所有列数据
(2)名称索引 df[‘分类’] == ‘姓名’ 返回结果是bool型 df.loc[df[‘分类’] == ‘姓名’,:]
可用于列筛选 多个条件同事满足用’&’,条件内部用括号,满足其一用’|’连接
7.数据清洗 pd.read_excel(‘数据集.xlsx’,sheetname = ‘一级流量’)
(1)对于列字段统一的数据 纵向合并 concat([表1,表2,表3])
(2)merge 横向合并 pd.merge(left = a,right = b,left_index = True,right_index = True, how = ‘inner’) how还可以有left right outer
(3)删除空值去重
df.dropna() 只要一行中任意一个字段为空就会被删除,设置subset参数指定当一行中的name字段为空时,才会删除 dropna(subset = [‘name’])
df.duplicated(subset=None, keep=’first’) # 指定列数据重复项判断;
# 返回:指定列重复行boolean Series
df.drop_duplicates(subset=None, keep=’first’, # 删除重复数据
inplace=False) # 返回:副本或替代
参数:
subset=None:列标签或标签序列,可选# 只考虑某些列来识别重复项;默认使用所有列
keep=’first’:{‘first’,’last’,False}
– first:将第一次出现重复值标记为True
– last:将最后一次出现重复值标记为True
False:将所有重复项标记为True
#实例1:重复数据判断
df= pd.DataFrame({‘k1’: [ ‘s1’]* 3 + [‘s2′]* 5,’k2’ : [1, 1, 2, 3, 3, 4, 4,4]})
result1=df.duplicated()
result2=df.duplicated(keep=’last’)
result3=df.duplicated(keep=False)
result4=df.duplicated(‘k1’)
result5=df.duplicated([‘k1′,’k2’])
# df result1 result2 result3 result4 result5
# first last False [‘k1’] [‘k1′,’k2’]
k1 k2
0 s1 1 0 False 0 True 0 True 0 False 0 False
1 s1 1 1 True 1 False 1 True 1 True 1 True
2 s1 2 2 False 2 False 2 False 2 True 2 False
3 s2 3 3 False 3 True 3 True 3 False 3 False
4 s2 3 4 True 4 False 4 True 4 True 4 True
5 s2 4 5 False 5 True 5 True 5 True 5 False
6 s2 4 6 True 6 True 6 True 6 True 6 True
7 s2 4 7 True 7 False 7 True 7 True 7 True
============================================================
实例2 重复数据清理- 副本
df.drop_duplicates() #保留第一个值,返回副本
df.drop_duplicates(keep=’last’) #保留最后一个值,返回副本
df.drop_duplicates(keep=False) #删除所有重复值,返回副本
df.drop_duplicates(‘k1’) #删除第一列重复值,返回副本
df.drop_duplicates([‘k1′,’k2’]) #删除全部列重复值,返回副本
# df result1 result2 result3 result4 result5
# first last False [‘k1’] [‘k1′,’k2’]
k1 k2 k1 k2 k1 k2 k1 k2 k1 k2 k1 k2
0 s1 1 0 s1 1 1 s1 1 2 s1 2 0 s1 1 0 s1 1
1 s1 1 2 s1 2 2 s1 2 3 s2 3 2 s1 2
2 s1 2 3 s2 3 4 s2 3 3 s2 3
3 s2 3 5 s2 4 7 s2 4 5 s2 4
4 s2 3
5 s2 4
6 s2 4
7 s2 4
(4)基于条件查询
df.loc[(df[‘访问数’] > 10000) & (df[‘类别’] == ‘强’),:]
(5)排序
df.sort_values(‘年龄’,ascending = False) ascending参数决定了排序顺序 False是降序
(6)分组
df.groupby(‘地区’).sum() 计算包括sum,max,min,mean,std
以上是对所有数值型字段进行计算,也可以指定列df.groupby(‘地区’)[‘列名1′,’列名2’].sum()
汇总依据列,默认转化为索引列,若不希望编程索引,groupby内传入参数as_index = False即可
(7)切分
切分(分桶)常用于一维数组的分类和打标
pd.cut(x,bins,right,labels) x:我们要传入和切分的一维数组或者列表 bins:表示切分的方式,可自定义传入列表[a,b,c] right:设置True或者False,True:表示分组区间是包含右边不包含左边;False是代表区间包含左不包含右 labels:打标参数
案例:每个渠道有对应的客流量,现在对各个渠道的客流级别进行评估,按照客流量
分成初级,百级,千级和万级
pd.cut(x = df[‘客流量’],bins = [0,100,1000,10000,100000])
(0,100]<(100,1000)<(1000,10000]<(10000,100000] 分组打标
df[‘分组打标’] = pd.cut(x = df[‘访客数’],bins = [0,100,1000,10000],right = False,labels = [‘初级’,’百级’,’千级’,’万级’])
(8)Apply函数 聚合运算以及分组基础上根据实际情况来自定义一些规则
df.groupby([‘列名’]).apply(func,args)
【注】pandas读取excel中日期格式的数据会自动变成科学技术法来展示,要还原数值,需要更改一下原始的设置
如:不显示科学计数法,保留小数点两位数
pd.set_option(‘display.float_format’,lambda x:’%.2f’ %x)