pandas学习心得

    技术2022-07-12  77

    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)

     

     

     

     

     

     

     

     

     

    Processed: 0.019, SQL: 9