• python数据分析工具 | pandas


     

    pandas是python下强大的数据分析和探索工具,是的python在处理数据时非常快速、简单。它是构建在numpy之上的,包含丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据。

    pandas基础

    # 安装
    pip install pandas

    pandas 基本的数据结构是 Series 和 DataFrame 。Series 就是序列,类似一维数组;DataFrame 则是相当于一张二维的表格,类似二维数组,它的每一列都是一个 Series 。每个 Series 都会带有一个对应的 Index ,用来标记不同的元素,Index 的内容可以是字母、数字、中文等。

    Series

    import numpy as np
    import pandas as pd
    
    # 创建Series方法
    方法1:s1 = pd.Series([1, 2, 3, 4])
    方法2:s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建
    方法3:s3 = pd.Series({'1':1, '2':2, '3':3}) # 通过字典创建
    方法4:s4 = pd.Series([1, 2, 3, 4], index=['A', 'B', 'C', 'D']) # 创建时设置索引
    
    s1.values  # 查看值
    s1.index   # 查看索引

    DataFrame

    from pandas import Series, DataFrame
    s1 = s2 = s3 = Series([1, 2, 3])
    df = DataFrame([s1, s2, s3], index=['A','B','C'], columns=[0, 1, 2])
    print(df)  # DataFrame 包含 index 和 column,分别为行索引和列索引
    out:
       0  1  2
    A  1  2  3
    B  1  2  3
    C  1  2  3
    
    df.index  # 查看行索引
    df.column # 查看列索引

    pandas实用操作

    I/O操作(df1表示DataFrame格式数据).

    1、从粘贴板读取
    df1.to_clipboard()         #写入粘贴板
    pd.read_clipboard()  # 复制后执行命令,即可读取到粘贴板中信息
    
    2、CSV文件
    df1.to_csv('名字.csv',index=False)  # false则表示不添加索引号
    pd.read_csv('df1.csv')        # 读取CSV文件
    
    3、json
    df1.to_json()               # 转化成json文件
    pd.read_json(df1.to_json()) # 读取json文件
    
    4、html
    df1.to_html('df1_html') # 转换成HTML文件
    
    5、excel
    df1.to_excel('df1.xlsx') # 生成Excel文件

    查看数据(df1表示DataFrame格式数据)

    df1.head() # 返回前五行
    df1.tail() # 返回后五行
    # 返回更多的内容则在括号中写出来,不写则默认为五行
    
    df1.iloc[:,:] # 索引切片,定位,基于index,与索引名无关
    df1.loc[:,:]  # 根据索引名来,label来过滤
    
    # 取列(column)
    df1[]  # 直接写column名便取得对应列,若要取多列,中括号内可以写个列表,eg:['A', 'B']
    
    df1.T  # 转置
    df1.describe()  # 快速查看数据的统计概要,包括count、mean、std、min等
    
    # 排序
    df1.sort_index(axis=1, ascending=False)  # 按轴排序,axis表示轴(0为列,1为行),ascending表示正反序
    df1.sort_values(by='')  # by后写column,表示按该column值排序

    数据运算

    在 pandas 中运算会自动对齐 index 和 column 。下面举例说明。

    在 Series 中,两个Series相加,会自动对齐索引,当索引没有时,则为NaN,NaN与任何数相加都为NaN,因此会出现图中【5】的结果,fill_value是将两个Series中的缺失项先填充,再进行相加运算。DataFrame数据同理,下面不加以赘述。

    缺失值

    缺失值可以用 numpy.nan 来表示,NaN 具有传染性,换句话说就是与 NaN 进行运算的结果都是 NaN 。对于含有 NaN 的普通函数计算结果均为 NaN,例如:

    a = numpy.array([2, 3, 1, numpy.nan, 4])
    
    numpy.sum(a)
    umpy.min(a)
    umpy.max(a)等均为NaN
    
    # 但是其有安全模式,也就是忽略其中的 NaN 进行运算
    numpy.nansum(a)
    umpy.nanmin(a)
    umpy.nanmax(a) 均会在已有数据中求相应的和,最大最小值

    缺失值的发现

    data.isnull()
    data.notnull()
    # 均返回布尔值

    缺失值的去除

    data.dropna(axis=0,how='any',thresh=None)
    # axis表示行和列0,1来表示
    # how为any时表示有Nan就删掉,为all时表示全为nan时才删掉
    # thresh表示一个界限,超过这个数字的nan则被删掉

    缺失值的填充

    data.fillna(axis=0, method=ffill)  # 或者参数只填一个数,即用该数字填充
    axis 坐标轴,行或列
    method 填充方式
      ffill:forward-fill 从前向后填充
      bfill:backward-fill 从后向前填充

    合并(merge)

    结合(concat)
    pandas.concat(df1, df2, df3)
    
    连接(join)
    left = pd.DataFrame({'key': ['foo', 'foo'], 'lval':[1, 2]})
    right = pd.DataFrame({'key': ['foo', 'foo'], 'rval':[1, 2]})
    pd.merge(left, right, on="key")
    out:
       key  lval  rval
    0  foo     1     4
    1  foo     1     5
    2  foo     2     4
    3  foo     2     5
    
    追加(append)
    data1.append(data2, ignore_index=True)

    数据透视表(Pivot Tables)

    当分析庞大的数据时,为了更好的发掘数据特征之间的关系,且不破坏原数据,就可以利用透视表 `pivot_table` 进行操作。

    新建表将 `A, B, C` 列作为索引进行聚合。
    df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
                       'B': ['A', 'B', 'C'] * 4,
                       'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
                       'D': np.random.randn(12),
                       'E': np.random.randn(12)})
    
    pd.pivot_table(df, index=['A', 'B'])
    
    1、透视表按指定行进行聚合
    将该 DataFrame 的 `D` 列聚合,按照 `A, B` 列为索引进行聚合,聚合的方式为默认求均值。
    pd.pivot_table(df, values=['D'], index=['A', 'B'])
    
    2、透视表聚合方式定义
    上一题中 `D` 列聚合时,采用默认求均值的方法,若想使用更多的方式可以在 `aggfunc` 中实现。
    pd.pivot_table(df, values=['D'], index=['A', 'B'], aggfunc=[np.sum, len])
    
    3、透视表利用额外列进行辅助分割
    `D` 列按照 `A, B` 列进行聚合时,若关心 `C` 列对 `D` 列的影响,可以加入 `columns` 值进行分析。
    pd.pivot_table(df, values=['D'], index=['A', 'B'],
                   columns=['C'], aggfunc=np.sum)
    
    4、透视表的缺省值处理
    在透视表中由于不同的聚合方式,相应缺少的组合将为缺省值,可以加入 `fill_value` 对缺省值处理。
    pd.pivot_table(df, values=['D'], index=['A', 'B'],
                   columns=['C'], aggfunc=np.sum, fill_value=0)

    作者:渔单渠 微信搜索“小田学Python”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    vue 简易弹框
    js瀑布流触底动态加载数据
    ios解决大转盘层级以及闪烁bug
    dom 相同父节点查找
    为什么 EXISTS(NOT EXIST) 与 JOIN(LEFT JOIN) 的性能会比 IN(NOT IN) 好
    exists(关联表)与left join 的效率比较
    【SpringCloud】Re04 Gateway
    【SpringCloud】Re03 Feign
    【SpringCloud】 Re02 Nacos
    【SpringCloud】 Re01
  • 原文地址:https://www.cnblogs.com/yudanqu/p/12442900.html
Copyright © 2020-2023  润新知