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)

 

 

 

 

 

 

 

 

 


版权声明:本文为zyf2695421695原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zyf2695421695/article/details/107077200