zoukankan      html  css  js  c++  java
  • 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”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/yudanqu/p/12442900.html
Copyright © 2011-2022 走看看