zoukankan      html  css  js  c++  java
  • 数据分析之pandas02

    DataFrame
    一.DataFrame
    DataFrame是一个[表格型]的数据结构.DataFrame又按一定顺序排列的多列数据组成,设计初衷是将Series的使用场景从一维扩展到多维.DateFrame既有行索引,也有列索引.
    行索引:index  列索引:columns  值:values
     
    二.DataFrame的创建
        1.最常见的方法传递一个字典来创建
             DataFrame以字典的键作为每一列的名称,一字典的值作为每一列,DataFrame会自动加上每一行的索引.
              例子: DataFrame(data=np.ones(shape=(3,4)),index=['a','b','c'],columns=['a','b','c','d'])
                dic = {
                        'hu':[1,3,4,5,6],
                        'li':[2,3,4,6,7]
                    }
                DataFrame(data=dic)
        2.使用ndarray(二维的)创建DataFrame,
    三.DataFrame属性
    1.values
    2.index
    3.columns
    4.shape
    DataFrame
    四.索引和切片
        1.索引
        (1)取得列,得到的是Series对象
            a. df['列索引']   b. df.列索引    df[['q','w']]
        修改列索引 df['列索引'] = '新值'
        (2)取得行,得到的是Series对象
            df.loc[显示索引]
            df.iloc[隐式索引]
            df.iloc[[0,1]]
        (3)取得元素
            df.loc['行索引','列索引']
            df.iloc[1, 2]
        2.切片
            (1)df[行索引:行索引]
            注意:直接使用中括号时:索引表示列索引,切片表示行切片
            (2)df.loc[:,:]左边行索引,右边列索引
                df.iloc[0:2,0:2]
    五.DataFrame做运算
        1.在运算中自动对齐不同索引的数据
        2.聚合操作
          df.mean(axis=1)     axis=1时去的是行平均值,默认取列的平均值
          df.max(axis=0/1)    默认取列的最大值,通过axis参数改变
    六.处理数据丢失
        1.None 和np.nan(NAN)的区别
            (1)None是Python自带的,其类型为python object.因此,None不能参与到任何计算中.
            (2)np.nan(NAN)是浮点类型,能参与到计算中,但计算的结果总是NAN
            (3)pandas中的None与NAN都视作np.nan
        2.pandas处理空值操作
            1.对空值进行判断
            (1)df.innull  对每一个元素进行空值判断
               df.notnull()
            (2)df.isnull().any(axis=0/1)  判断行/列中是否有空值
               
               df.notnull().all(axis=0/1)
            2.过滤和填充空值
                (1)df.dropna(axis=0/1,inplace=True)直接删除空值  0表示行,1表示的是列, inplace表示是否更改原数据
                (2)df.drop(labels,axis=0/1,index,columns,inplace)
                
                (3)填充  df.fillna(value,method,axis=0,limit)
                        value表示默认填充的数
                        method:ffill用前面的填充,bfill用后面的填充
                        limit限制填充个数
                        inplace
    七.DataFrame的多级索引
         1.隐式构造  最常见的是给DataFrame构造函数的index或者columns参数传递两个或更多的数组
         2显示构造   pd.MultiIndex.from_product()
      例子:隐式构造:DataFrame(np.random.randint(60, 100, size=(2,4)), index=('li','wang'),columns=([['qizhong','qimo','qizhong','qimo',],['math','english','math','english']]))
        显示构造:col = pd.MultiIndex.from_product([['qizhong', 'qimo'],['math','physics']])
        np.random.seed(10)
        DataFrame(np.random.randint(70,110,size=(2,4)),index=('liqian','hujun'),columns=col)
    八.pandas的拼接操作
        1级联:pd.concat,df.append()
            (1).pd.concat()
             a.匹配级联
                pd.concat([],axis=0/1,join='inner',ignore_index=True)
                join='outer'/'inner' 表示的是级联的方式,outer会将所有的项进行级联(忽略匹配和不匹配),而inner只会将匹配的项级联到一起,不匹配的不级联
                ignore_index=True  忽略列索引
                            keys=[]                      为DataFrame添加name唯一标识
             b.不匹配级联
               不匹配指的是级联的维度索引不一致,例如纵向级联时列索引不一致,横向级联时行索引不一致
               有两种连接方式
               pd.concat()
               a.外级联:补NaN(默认模式) outer
               b.内级联:只连接匹配的项   inner
            (2).df.append()   这个只能进行列的级联
       2.合并:pd.merge()
            补充:pd.read_csv  pd.reda_excel(filepath, sheetname=1)  filepath 路径  sheetname  sheet表名
                display()  可以显示多个变量信息
             (1)pd.merge(left,right,on, left_on,right_on,left_index,right_index,how)
                    on    表示要进行合并的索引,
                    how   表示合并的方式,outer/inner,  left/right表示保证左边/右边的完整性
                    left_index,right_index  表示左右合并的索引
    九.DataFrame筛选和排序
        1.df.query('year=2012')
        2.df.sort_values(b y,axis=0,ascending=true)
                by:以什么字段进行排序
                ascending:true为从小到大排序, false为从大到小排序
     
     
    DataFrame高级操作
    一.DataFrame中去除重复元素行
        1.先检查出重复值,再进行删除.
                (1)   df.duplicated(keep='')只能检查重复的行数据 
                      keep: first/last/False  保留第一个重复行/最后一个重复行/都不保留
          (2) 通过df.drop()进行删除
                    例子:s=df.duplicated(keep='last')
                        ss = df.loc[s].index
                        df.drop(axis=0,index=ss,inplace=True)
      2.直接使用drop_duplicates(keep='first/last/false)删除重复的行
                    例子:df.drop_duplicates(keep='first')
    二替换和映射.
        1.replace()函数:替换元素
                (1)单值替换
                           a.普通替换:替换所有符合要求的元素: to_replace要替换的元素,value替换的值
                            b.按列指定单值替换:to_replace={列索引(显示索引):替换值},value='value'
               (2)多值替换
                            a.列表替换:to_replace=[],value=[]
                            b字典替换(推荐):to_replace={to_replace:value,to_replace:value}
                          例子:df.replace(to_replace=44, value=222)# 单值替换
                    df.replace(to_replace={'b':69},value=333)# 按列指定单值替换
                    df.replace(to_replace=[44,69],value=[55,66])# 用列表进行多值替换
                    df.replace(to_replace={44:33333,69:11111})   # 用字典进行多值替换
     2.map函数(为Series的方法)
                (1)map()可以用字典映射新一列数据
                (2)map()  可以使用lambda或自定义方法来进行运算或其他操作
                例子:(1)df1['c_name'] = df1.name.map({'李倩':'Jane','胡涛':'领导','胡双俊':'Tom'})
              (2)df1['tax'] = df1.salary.map(tax)
                    def tax(s):
                        if s > 5000:
                           return s - (s-5000)*0.3
                        return s
    三.过滤
        1.使用聚合操作对数据异常值检测和过滤
        例子:np.random.seed(1)      # 创建一个1000行3列0-1随机数的DataFrame
            df2 = DataFrame(np.random.random(size=(1000,3)),columns=['a','b','c'])   # 通过df.std()聚合操作求df的标准差
            aa = df2.std(axis=0)
            df2.loc[df2['b'] < 2*aa['b']]      # 过滤掉元素值中小于2倍标准差的行
    四.排序
        1.使用df.take()函数排序  函数接受一个索引列表,用数字表示,使得df根据列表中索引的顺序进行排序
        例子:
            d1.take([1,2,0],axis=1)      # 在take中axis=1表示的是列, 0表示行
            q = np.random.permutation(3) # 可以生成x个从0-(x-1)的随机数列
            d1.take(q)
    五.分组
        1.使用groupby实现分组
        2.对分组之后的结果(DataFrameGroupBy对象)进行操作
        3.groupby(by=['索引1','索引2'])  使用多个分组参数
            例子:(1)df3.groupby(by='akind',axis=0).groups   # 查看分组详情
                   df3.groupby(by='akind',axis=0)['price'].mean()  # 得到每个水果的平均价格
                   df3['price_aver'] = df3['akind'].map({'Apple':4.0,'Banana':4.0,'Orange':4.5}) # 通过映射将平均价添加到df上
                (2):使用apply()函数求平均值
                例子:
                        df4.groupby(by='akind',)['price'].apply(my_mean)
                        def my_mean(s):   # s是每一个分组里面的价格集合
                            sum = 0
                            for i in s:
                                sum+=i
                            return sum/s.size
                (3)使用transform()函数求平均值
                例子:df4.groupby(by='akind',)['price'].transform(my_mean)  跟apply一样,结果不一样
    六.数据加载
        1.pd.read_csv(filepath,sep='',header)
                filepath    文件路径
                sep         分割符
                header      是否将第一行作为列索引
        2.pd.read_excel()  与 df.to_excel()
        3.连接数据库
            (1).连接数据库        conn = pymysql.Connect(host,port,user,password,db)
            (2).读取表中的数据值   sql= sql语句, pd.read_sql(sql,conn)
            (3).将一个地方中的数据值写入储存到db df1.to_sql(name='df',con=conn)
    七.统计一行中各个元素出现的次数.
        1.value_count()查看某一类中所有的元素出现的次数
  • 相关阅读:
    jsp中的绝对路径、相对路径和访问jsp的方式
    Java链接MySQL数据库的用配置文件和不用配置文件的代码
    易宝支付开发文档
    安装Visual Studio IntelliCode提供代码智能提示AI
    Generator生成器函数执行过程的理解
    git pull --rebase的理解
    react-native-cli运行项目及打包apk失败的解决过程
    bfc与浮动元素的关系
    触发bfc解决父子元素嵌套垂直方向margin塌陷问题
    html文本或元素6px间距问题
  • 原文地址:https://www.cnblogs.com/hu13/p/9360264.html
Copyright © 2011-2022 走看看