zoukankan      html  css  js  c++  java
  • pandas

    三大对象

    1.DataFrame(index,  columns ,values)

      1)先从文件(excel,csv,mysql)中读取,或者自己制造一个DataFrame对象

      2)查看数据

        查看数据的形状(几行几列)

        查看每一列的数据类型,数据中是否有空值(行、列),查看每一列和标签的关系(离散-柱状图,连续-密度图或者子状图),两列之间的相关度,查看整个的数据分布(最小,最大,均值,标准差等)目的之一是找出异常值。

      3)清洗数据

        删除

          列(如序号列)、行、空值的列(如:一列中绝大多少是空值)

        替换

          空值(一列中极少数空值,替换方法许多,如均值(连续型如年龄),众数(离散型,如性别),线性差值等),去掉空格/特殊字符,数据类型转换,列名,索引名

      4)整理

          排序:列的值,索引

          修改结构:列变成索引

          分组:索引,列

            注意:分组要做数据统计   (透视表-pivot-table、 交叉表)

          应用函数

            列

      5)数据合并

        多个DateFrame 按照不同的轴合并

      6)数据统计

        count,sum,max,min  mean

      7)可视化

    使用:

        导入: import pandas as pd

    1.数据类型

      1)Series:index(行索引)+values(1维numpy数据)

         2)DataFrame:index(行索引)+Columns+values(2维numpy数据)

    2.读入/写入数据

      1)手动创建(内存)

        df = pd.DataFrame(2维列表/2维numpy数组/字典,index =1维列表/数组 ,columns =1维列表/数组  )

      2)从文件读取(csv--以逗号分隔的文本、excel、json、xml、html等)

        df = pd.read_csv('csv文件',sep=‘,’ , encoding ='utf-8/gbk',header= True/False)

      3)从数据库中读取

      4)写入文件/数据库

        df.to_csv('csv文件',header= True, index= False)

    3.查看数据

      1)查看数据的形状(几行几列)

        df.shape

      2)查看数据列的数据类型和空值

        df.info()

        df.isnull.sum(axis=0/1)/df.shape[0/1]

      3)查看数据的前5行和后5行

        df.head()、df.head(n)

        df.tail()、df.tail(n)

      4)查看统计信息

        df.describe(include = 'all')

      5)查看某列的唯一性(unique)

        s.unique()

        s.value_counts()   #可以用于计数

        如:

        df.年龄.value_counts()

                  df['年龄'].value_counts()

       柱状图显示结果:

    import matplotlib.pyplot as plt
    df['年龄'].value_counts().plot(kind='bar')
    plt.show()

    4.选择数据

      方法1:

        获取行   df[切片/全部行的布尔数组]

             如: df[1:4]    #获取第2,3,4 三条数据

             df[[False,True,True,True,False,False]]

             df[df.age>15 ]            #以上两条含义一致,更多选择下一条

        获取列

          df[列名] 或df.列名, df[列表]

      方法2

        获取行/列    df.iloc[行自动索引切片,列自动索引切片]

             df.loc[行手动索引切片,列手动索引切片]

              df.loc[:,'性别']

               df.loc[:,['性别','年龄']]

              df.iloc[1:4:]

      增加列  df[不存在的列] = 值

      增加行  df.iloc[6]=['wangwu',20,'Y']  #报错

          df.loc[3]=['wangwu',20,'Y']   #已知道有多少行

          len(df)  #用于测试一共有多少行  

         改进:df.loc[len(df)]=['wangwu1',20,'Y']

    相关代码:

    import pandas as pd
    
    
    df = pd.DataFrame(
        [
            ['zhangsan',18,'Y'],
            ['lisi',19,'N'],
            ['wangwu',20,'Y']
        ],index=['a','b','c'],columns=['姓名','年龄','是否结婚'])
    df
    
    df.index,df.columns,df.valuse
    
    df = pd.read_csv('1.txt')
    df
    
    df.to_csv('2.txt',header= True)
    
    df.年龄, type(df.年龄)
    
    df.to_csv('3.txt',index = False)
    
    df.shape
    
    
    df.info()
    
    df.tail()
    
    df.tail(2)
    
    df.describe()
    
    df.describe(include = 'all')
    
    df.年龄.unique
    
    df.年龄.value_counts()
    
    df['年龄'].value_counts()
    
    import matplotlib.pyplot as plt
    df['年龄'].value_counts().plot(kind='bar')
    plt.show()
    
    df.loc[3]=['wangwu',20,'Y']
    
    df.loc[len(df)]=['wangwu1',20,'Y']
    
    df

     5.清洗数据

      1)删除

          drop(行/列/列的列表---格式是字符串/整数/列表 , axis = 0/1)

          dropna:删除含有空值 的列和行,很少用。

       注意:大部分删除的列,1)感觉没有用的列,通常是id,name这些列。2)空值太多的列 3)没用的列-通过特征工程比如方差为0,过滤法F减压

    df.drop('姓名',axis=1) 结果变,df没有变,如果变,两种办法,1)把结果赋值给df,2)把参数加入inplace=True
    

     

    #删除空值的列
    #先查看所有列的空值
    df.info()  #结果不是统计数据,不方便
    df.isnull()  #是空值才为True
    df.isnull().sum(axis = 0) #沿着轴0进行累加空值数
    df.isnull().sum(axis = 0)/ df.shape[0] #沿着轴0得到空值的比例数


    #删除空值的行
    #先查看所有行的空值

    df.isnull().sum(axis = 1)/ df.shape[1] #沿着轴1得到空值的比例数

    df.drop(3,axis = 0)  #删除第三行

    df.isnull().sum(axis = 1)/ df.shape[1]<0.8   #找出空值数比例在0.8以下的列

    df2 = df[(df.isnull().sum(axis = 1)/ df.shape[1]<0.8)]   #选择满足该比例的数据列

       2)替换

          s.fillna(值):空值替换

          s.replace(old_value, new_value):非空值替换

        举例:

          df.是否结婚.replace ('Y',0)

    #连续型的用均值
    #离散型的用众数
    df.是否结婚.mode()[0]


    df.是否结婚 = df.是否结婚.fillna(df.是否结婚.mode()[0])

      

      3)数据类型转换

        astype

        pd_todatetime(要改变的字符串, format = 格式) #字符串格式良好,则不用写format

    举例:

      查看类型:dy.dtypes

        df.年龄.astype(float)

      4)修改列名

        df.rename(old_name,new_name)

      5)apply 函数

        apply(lambda x:处理x)

      6)排序

        sort_value

        sort_index

      df.sort_value('年龄',axis=0,ascendinig = True) #从小到大, 若要从大到小,改为False

      df.sort_value(['年龄','性别'], axis=0,[ascendinig = True,ascending = False]) #从小到大, 若要从大到小,改为False

    6。数据整理

      1)连接

        拼接: pd.concat((df1,df2),axis=0/1)  

        连接:pd.merge(左边,右边,on = 关键字,how = ‘inner/left/right’)

      2)分组

        set_index

        reset_index

        stack

        unstack

        groupby

      3)透视表

        pivot_table(哪几列数据,)

        df.pivot_table(value='价格',index =‘产地’,columns= '类别',aggfunc='mean').fillna(0)

      4)交叉表(把一列作为)用于统计分组频率的特殊透视表,

        crosstab

      5)统计

        

    4.查看数据分布    

     

     

    2.Series

    3.Panel

  • 相关阅读:
    学习opencv跟轮廓相关的
    opencv 连通域需要的函数解析
    【7.4】__new__和__init__的区别
    【7.3】属性描述符和属性查找过程
    【7.2】__getattr__、__getattribute__魔法函数
    【7.1】property动态属性
    【6.4】一个经典的参数错误
    【6.3】del语句和垃圾回收
    【6.2】==和is的区别
    【6.1】python中的变量是什么
  • 原文地址:https://www.cnblogs.com/evan0925/p/11193178.html
Copyright © 2011-2022 走看看