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()查看某一类中所有的元素出现的次数

数据分析之pandas02的更多相关文章

  1. 利用Python进行数据分析 基础系列随笔汇总

    一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...

  2. 利用Python进行数据分析(10) pandas基础: 处理缺失数据

      数据不完整在数据分析的过程中很常见. pandas使用浮点值NaN表示浮点和非浮点数组里的缺失数据. pandas使用isnull()和notnull()函数来判断缺失情况. 对于缺失数据一般处理 ...

  3. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  4. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  5. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  6. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  7. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  8. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  9. 利用Python进行数据分析(3) 使用IPython提高开发效率

      一.IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效. 它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执 ...

随机推荐

  1. Java中基本数据类型byte,short,char,int,long,float,double 取值范围

    部分内容转自:java 彻底理解 byte char short int float long double 首先说byte: 这段是摘自jdk中 Byte.java中的源代码: /** * A co ...

  2. sap 查看类的修饰属性

  3. 对k8s service的一些理解

    服务service service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务 举个例子一个a服务运行3个pod,b服务怎么访问a服务的pod, ...

  4. 【Redis】持久化

    Redis提供了为持久化提供了两种方法:第一种是快照:他可以将存在某一时刻的所有数据都写入硬盘里面.第二种是只追加文件(AOF):它会在执行命令时,将被执行的写命令复制到硬盘里面. Redis支持持久 ...

  5. xxx.app已损坏,打不开.你应该将它移到废纸篓-已解决

    到这种情况可能不是你的软件包的问题,可能是macos安全设置问题. 解决办法就是: 1.系统偏好设置... -> 安全性与隐私-->修改为任何来源 2.serria里面没有“任何来源”这一 ...

  6. 自定django登录跳转限制

    django自定义一个登录跳转限制: 解释: 不登录不让跳转到其它页面. 原理: 做一个装饰器,在访问路由时,先进行判断,登录session是否存在,如果存在则跳转,不存在则返回到登录页面.或者你可以 ...

  7. RCNN系列算法的发展

    一. RCNN系列的发展 1.1  R-CNN 根据以往进行目标检测的方法,在深度学习应用于目标检测时,同样首先尝试使用滑动窗口的想法,先对图片进行选取2000个候选区域,分别对这些区域进行提取特征以 ...

  8. 简易C# socket

    服务器 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Thread ...

  9. C# 如何批量修改集合元素的属性值?

    我们往往会遇到要批量修改集合中元素的值,最笨的办法就是foreach循环,但本文介绍几种优雅的方法. 首先,我们准备好元素类和初始集合: 下面就是几种方法,目前并没有对性能做进一步的测试,有兴趣的童鞋 ...

  10. 谈谈CSS中一些比较"偏门"的小知识

    前面我写了:谈谈html中一些比较"偏门"的知识,现在这篇(主要)想谈谈个人所见的CSS一些小知识点,加深印象:同时也希望有需要的人能有收获! 1.常见的浏览器内核: 以IE为代表 ...