美文网首页
数据分析-02

数据分析-02

作者: 博士伦2014 | 来源:发表于2018-10-14 11:55 被阅读0次

    第二神器pandas库

    1. Series

    1.1 一种类似一维数组的对象
    • 组成
      index
      values
    1.2 Series(data=None, index=None, dtype=None, name=None,copy=False,fastpath=False)

    Series(data=[1,2,3,4],index=list('ABCD'))
    ````Series({'A':1,'B':2,'C':3,'D':4})```

    • 作用:创建Series数组
      data指定values
      index指定索引
      name指定名字
    1.3 索引和切片
    • 显式索引

      • 使用指定的索引 s['A']
      • s.loc[]
        s.loc['A':'C']
        s.loc[['A','B']]
    • 隐式索引

      • 使用整数索引 s[0]
      • s.iloc[]
        s.iloc[::2]
    1.4 属性和方法

    shape查看形状
    size内容的个数
    index查看索引
    values查看内容
    head()查看头几行数据
    tail()查看末尾几行数据
    unique()去重

    1.5 空值
    • None会转化为NaN,计算时当成0
    • 检测
      isnull()
      notnull()
    1.6 Series运算
    • s + | * 4
      加或乘
    • Series之间
      运算中自动对齐不同索引的数据
      不对应用NaN补位
    1.7 多重索引

    Series(data,index=[['期中','期中','期末','期末'],['语文','数学','语文','数学']])
    Series([100,90,80,70,60,50],index=pd.MultiIndex.from_product([['期中','期末'],['语','数','外']]))

    1.8 多层索引的索引与切片
    • 索引
      s1.loc['期中','语']
      s1.loc['期中'].loc['语']
    • 切片
      s1.loc['期中':'期末']
      s1.iloc[0:4]

    2. DataFrame

    2.1 一个表格型数据结构
    • 组成
      index(行索引)
      columns(列索引)
      values(numpy的二维数组)
    • 属性
      columns
      values
      index
      shape
    2.2 创建

    DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
    data一个二维数组
    index行索引--->列表
    columns列索引--->列表

    index=['张三','李四','王老五','zhaoliu','田七']
    columns = ['python','java','c','math']
    df = DataFrame(data=nd,index=index,columns=columns)
    
    DataFrame(data={
    'A':[1,2,3,4],
    'B':[1,2,3,4],
     'C':[1,2,3,4],
    })
    

    pd.read_csv('./data/president_heights.csv')

    2.3 查找

    .query(查询条件) :df1.query('name=="lucy"&age>14')

    2.4 索引
    • 列索引
      字典式索引: df['python']
      属性索引: df.python
    • 行索引
      .loc[]: df.loc['zhaoliu']
      .iloc[]:df.iloc[3]
    • 元素索引
      需求:获取行张三,列python数据
    df.loc['张三','python']
    df.python.iloc[0]
    df.iloc[0,0]
    df.python.loc['张三']
    df.loc['张三'].loc['python']
    

    .loc 里面用字符串索引 df.loc['行名','列名']
    .iloc 里面用编号 df.iloc[行索引,列索引]

    2.5 切片
    • 行切片
      df['刘总':'学委']
      df[0:3]
    • 列切片
      .loc ---- 使用index :df.loc[:,'韭菜':'臭豆腐']
      .iloc---- 使用索引: df.iloc[:,0:3]
    2.6 运算
    • 和数值
      直接加乘,也可使用索引对具体内容进行运算

    • DataFrame之间
      运算中自动对齐不同索引的数据
      不对应用NaN补位
      Python 操作符与pandas操作函数的对应表


      Python 操作符与pandas操作函数的对应表
    • Series与DataFrame之间
      使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
      df1 + s2
      使用pandas操作函数
      axis=0:以列为单位操作(参数必须是列),对所有列都有效。
      axis=1:以行为单位操作(参数必须是行),对所有行都有效。
      df1.add(s2,axis='index')

    2.7 处理丢失数据
    • None:python自带的数据类型,不参与计算
    • np.NaN:结果为nan
      np.nansum(nd)
      此函数将nan视为0,进行计算
    • 空值操作
      isnull()
      是nan
      配合any()使用效果更佳
      notnull()
      不是nan
      dropna(): 删除有nan的行或列
      参数:how='any|all'
      fillna(): 填充
      参数:method {'backfill', 'bfill', 'pad', 'ffill', None}
      从后面找值来填充nan 从前面找值来填充nan
      参数:value指定填充的值
      参数:limit限制填充nan的个数
      参数:inplace是否替换原来的数据
      参数:axis指定轴线
    2.8 拼接操作
    • 级联
      会出现重复的行索引
    pd.concat(objs,     # obj指定拼接的对象
    axis=0,             # axis指定拼接控制方向
    join='outer',       # join指定拼接方式,outer外联方式,有的都要,inner保留相同的列
    join_axes=None,     # join_axes指定连接轴
    ignore_index=False, # ignore_index指定是否重新生成索引
    keys=None, 
    levels=None, 
    names=None, 
    verify_integrity=False, 
    sort=None,           # sort指定对不上的列的填充
    copy=True)
    
    pd.append    df5.append(df6)
    
    • 合并
      pd.merge
    pd.merge(left, right, 
    how='inner', 
    on=None, 
    left_on=None, right_on=None, 
    left_index=False, right_index=False, 
    sort=False, suffixes=('_x', '_y'), 
    copy=True, 
    indicator=False, 
    validate=None)
    
    
    • 一对一
      都有的进行拼接
    • 多对一
      两个表都有的项目作乘积
    • 多对多
      使用on参数指定特征进行合并

    pd.join

    2.9 多层索引
    • 多层行索引
      pd.MultiIndex

      • .from_arrays
        indexes = pd.MultiIndex.from_arrays([['期中','期中','期中','期末','期末','期末'],['语','数','外','语','数','外']])
      • .from_tuples
        indexes = pd.MultiIndex.from_tuples([('期中','语'),('期中','数'),('期中','外'),('期末','语'),('期末','数'),('期末','外')])
      • .from_product
        indexes = pd.MultiIndex.from_product([['期中','期末'],['语','数','外']])
    • 多层列索引
      同多层行索引

    2.10 多层索引的索引与切片
    • 索引
      df1['一班']
      df1.loc['期中'].loc['语']
      df1.loc['期中','语']
    • 切片
      df1.iloc[:,0:4]
      df1.loc[:,'一班'].loc[:,'01':'02']
      总结:要么用编号,要么用文字索引取的话就一级一级来吧(猥琐发育,别浪)

    3. 读取外部表文件

    read_csv :读取csv文件,也可读取网上的csv文件,传入url
    read_table : 读取tsv文件
    read_excel: 读取xlsx文件
    html,json
    read_sql(sql, con): 读取数据库
    sql指定数据库操作命令
    con指定连接的数据库

    4. 向外部输出

    to_csv|table|json|html|excel...(path):
    path指定输出路径及文件名
    to_sql(table, con):
    table指定输出的表名
    con指定连接的数据库

    5. 层次化索引

    Series
    DataFrame

    6. 索引的堆(stack)

    .stack()
    参数:level指定把哪一层索引放下了
    列索引脱衣服
    unstack()
    参数:level指定把哪一层索引放下了
    行索引脱衣服

    7. 数据处理

    重复元素
    df.duplicated(subset=None, keep='first')
    keep指定第一个不参与重复判断 first | last | False
    df.duplicated(keep=False)
    df.drop_duplicates(subset=None, keep='first', inplace=False)
    keep指定保留第一个不删除 first | last | False
    df.drop_duplicates(keep=False)

    8.映射

    8.1 Series
    • 替换元素

      1. 单值
        • 普通
          s1.replace(to_replace='beijing',value='西安')
        • 字典
          s1.replace(to_replace={'beijing':'西安'})
      2. 多值
        • 列表
          s1.replace(to_replace=[100,np.nan],value=['满分','缺考'])
        • 字典
          s1.replace(to_replace={100:'满分',np.nan:'缺考','beijing':'西安','没有的':'也不会报错'})
    df.replace(to_replace=None, 
    value=None, 
    inplace=False, 
    limit=None, 
    regex=False, 
    method='pad')
    

    应用:可以用来做过滤器

    8.2 DataFrame
    • 替换元素

      1. 单值
        • 普通
          df.replace(to_replace='Beijing',value='西安')
        • 指定列的单值替换
          df.replace(to_replace={4:'Beijing'},value='西安')
      2. 多值
        • 列表
          df.replace(to_replace=['甲','乙',np.nan],value=[1,2,'空值'])
        • 字典
          df.replace(to_replace={'甲':1,'乙':2,np.nan:'空值','Beijing':'西安','不存在的也可以放这里':'不会报错'})
    df.replace(to_replace=None, 
    value=None, 
    inplace=False, 
    limit=None, 
    regex=False, 
    method='pad')
    

    应用:可以用来做过滤器

    • map函数
      1. map(字典) 字典的键要足以匹配所有的数据,否则出现NaN
      2. map(lambda)中可以使用lambd表达式
      3. map(func)中可以使用方法,可以是自定义的方法
    • rename函数
      1. 使用rename()函数替换行索引
      2. index 替换行索引
      3. columns 替换列索引
      4. level 指定多维索引的维度

    9.数据检测过滤

    思路:查看概览,列标准差,列平均值,获取每个值和平均值的差的绝对值,和列标准差的3倍比较,获取行异常数据,删除
    1) . df.describe() # 对表格数据进行描述性概览
    2) . df.std() # 对每一列 求 标准差 获取到的是 Series
    3). df.mean()
    4). np.abs(df-df.mean())
    5). np.abs(df-df.mean()) > 3*df.std()
    6). (np.abs(df-df.mean()) > 3*df.std()).any(axis=1) -----(np.abs(df-df.mean()) > 3*df.std()).any()
    7). df[(np.abs(df-df.mean()) > 3*df.std()).any(axis=1)]
    8). idx = df[(np.abs(df-df.mean()) > 3*df.std()).any(axis=1)].index
    9). df.drop(labels=idx)

    10. 排序

    • take()函数接受一个索引列表,用数字表示
      df.take([1,3,4,2,5])
    • 顺序打乱,但不会重复
      np.random.permutation(5)
      可作为take的索引列表

    11. 数据分类处理

    数据分类处理

    • 分组:先把数据分为几组
    • 合并:把不同组得到的结果合并起来 merge合并
    • 用函数处理:为不同组的数据应用不同的函数以转换数据
      groupby()函数: 分组函数
    • groups属性查看分组情况
      需求:根据item分组,通过groups属性查看结果
      df.groupby('item').groups

    12.透视表

    理解为表分组展示数据

    pd.pivot_table(data, 
    values=None, 
    index=None, 
    columns=None, 
    aggfunc='mean', 
    fill_value=None, 
    margins=False, 
    dropna=True, 
    margins_name='All')
    

    13. 交叉表

    理解为表头分栏

    pd.crosstab(index,
    columns, 
    values=None, 
    rownames=None, 
    colnames=None, 
    aggfunc=None, 
    margins=False, 
    margins_name='All', 
    dropna=True, 
    normalize=False)
            
    ###

    相关文章

      网友评论

          本文标题:数据分析-02

          本文链接:https://www.haomeiwen.com/subject/jwhzaftx.html