zoukankan      html  css  js  c++  java
  • pandas模块

    pandas简介:

    pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的。

    pandas的主要功能:

    1. 具备对其功能的数据结构DataFrame、Series
    2. 集成时间序列功能
    3. 提供丰富的数学运算和操作
    4. 灵活处理缺失数据

    安装方法:

    pip install pandas

    引用方法:

    import pandas as pd

     

    Series --- 一维数据对象

    Series是一种类似于一维数据的对象,由一组数据和一组与之相关的数据标签(索引)组成。

    创建方式:

    import pandas as pd
    pd.Series([4,7,-5,3])
    pd.Series([4,7,-5,3],index=['a','b','c','d'])
    pd.Series({'a':1,'b':2})
    pd.Series(0,index=['a','b','c','d'])

    获取值数组和索引数组: values属性和index属性
    Series比较像列表(数组)和字典的结合体

    示例代码:

    # Series创建方式
    import pandas as pd
    import numpy as np
    
    pd.Series([2,3,4,5])  # 列表创建Series
    """
    输出结果:
    0    2
    1    3
    2    4
    3    5
    dtype: int64
    
    # 左边一列是 索引,右边一列是值
    """
    
    pd.Series([2,3,4,5],index=["a","b","c","d"])  # 指定索引
    """
    输出结果:
    a    2
    b    3
    c    4
    d    5
    dtype: int64
    """
    
    # Series支持array 的特性(下标)
    pd.Series(np.arange(5))  # 数组创建 Series
    """
    输出结果:
    0    0
    1    1
    2    2
    3    3
    4    4
    dtype: int32
    """
    
    sr = pd.Series([2,3,4,5],index=["a","b","c","d"])
    sr
    """
    a    2
    b    3
    c    4
    d    5
    dtype: int64
    """
    
    # 索引:
    sr[0]
    #  输出结果: 2  # sr虽然指定了 标签索引,但仍可以利用 下标索引 的方式获取值
    
    sr[[1,2,0]]  # sr[[索引1,索引2,...]]
    """
    b    3
    c    4
    a    2
    dtype: int64
    """
    
    sr['d']
    # 输出结果: 5
    
    # Series可以和标量进行运算
    sr+2
    """
    a    4
    b    5
    c    6
    d    7
    dtype: int64
    """
    
    # 两个相同大小(长度相同)的 Series 也可以进行运算
    sr + sr
    """
    a     4
    b     6
    c     8
    d    10
    dtype: int64
    """
    
    # 切片
    sr[0:2]  # 也是 顾首不顾尾
    """
    a    2
    b    3
    dtype: int64
    """
    
    # Series也支持 numpy 的通用函数
    np.abs(sr)
    """
    a    2
    b    3
    c    4
    d    5
    dtype: int64
    """
    
    # 支持布尔型索引过滤
    sr[sr>3]
    """
    c    4
    d    5
    dtype: int64
    """
    
    sr>3
    """
    a    False
    b    False
    c     True
    d     True
    dtype: bool
    """
    
    # Series支持字典的特性(标签)
    # 通过字典创建 Series
    sr = pd.Series({"a":1,"b":2})
    sr 
    """
    a    1
    b    2
    dtype: int64
    # 字典的 key 会当作 标签
    """

    sr["a"] # 输出结果: 1 sr[0] # 输出结果: 1 # 判断 一个字符串 是不是一个Series 中的标签 "a" in sr # 输出结果: True for i in sr: print(i) """ 打印结果: 1 2 # for 循环中,遍历的是 Seires 中的 值(value),而不是它的标签;这是和字典不同的地方 """ # 分别获取 Series 的值和索引 sr.index # 获取索引 # 输出结果: Index(['a', 'b'], dtype='object') # 是一个 Index 类的对象,其和数组对象(Array)完全一样 sr.index[0] # 输出结果: 'a' sr.values # 获取 Series 的值 # 输出结果: array([1, 2], dtype=int64) # 键索引 sr['a'] # 输出结果: 1 sr[['a','b']] # 也是 花式索引 """ a 1 b 2 dtype: int64 """ sr = pd.Series([1,2,3,4,5,6],index=['a','b','c','d','e','f']) sr """ a 1 b 2 c 3 d 4 e 5 f 6 dtype: int64 """
    sr[['a','c']] """ a 1 c 3 dtype: int64 """
    sr['a':'c'] # 通过标签进行切片; 首尾相顾,前包后也包 """ a 1 b 2 c 3 dtype: int64 """

    series 整数索引问题:

    整数索引的pandas对象很容易出错,如:

    import pandas as pd
    import numpy as np
    
    sr = pd.Series(np.arange(10))
    sr
    """
    0    0
    1    1
    2    2
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    dtype: int32
    # 上述的整数索引是自动生成的索引
    """
    
    sr2 = sr[5:].copy()
    sr2
    """
    5    5
    6    6
    7    7
    8    8
    9    9
    dtype: int32
    # 上述的索引仍然是整数索引,但是不是从0开始的
    """
    sr2[5]  # 此时的 5 解释为 标签,而不是下标(索引)
    # 输出结果: 5
    
    # sr2[-1]  # 会报错;因为当索引是整数的时候,[] 中的内容一定会被解释为 标签
    
    # 解决方法: loc 和 iloc
    sr2.loc[5]  # loc 表示 [] 中的内容解释为 标签
    # 输出结果: 5
    sr2.iloc[4] # iloc 表示 [] 的内容解释为 下标(索引)
    # 输出结果: 9
    sr2.iloc[0:3]
    """
    5    5
    6    6
    7    7
    """
    # 所以 用整数索引的时候 一定要 loc 和 iloc 进行区分

    如果索引是整数类型,则根据整数进行下标获取值时总是面向标签的
    解决方法:loc 属性(将索引解释为标签) 和 iloc 属性(将索引解释为下标)

    Series --- 数据对齐

    pandas 在进行两个Series对象的运算时,会按照索引进行对齐然后计算

    示例代码:

    # Series -- 数据对齐
    import pandas as pd
    
    sr1 = pd.Series([12,23,34],index=["c","a","d"])
    sr2 = pd.Series([11,20,10],index=["d","c","a"])
    sr1 + sr2
    """
    a    33    # 23+10
    c    32    # 12+20
    d    45    # 34+11
    dtype: int64
    # 数据会按照标签对齐
    """
    # pandas 在进行两个Series对象的运算时,会按照索引进行对齐然后计算
    
    # 注: pandas 的索引支持重复,但我们不要让索引重复 
    pd.Series([1,2],index=["a","a"])  
    """
    a    1
    a    2
    dtype: int64
    """
    
    # 两个 pandas对象的长度不一样时
    sr3 = pd.Series([12,23,34],index=["c","a","d"])
    sr4 = pd.Series([11,20,10,21],index=["d","c","a","b"])
    sr3+sr4
    """
    a    33.0
    b     NaN
    c    32.0
    d    45.0
    dtype: float64
    # 在 pandas 中 NaN 会被当作数据缺失值
    """
    
    sr5 = pd.Series([12,23,34],index=["c","a","d"])
    sr6 = pd.Series([11,20,10],index=["b","c","a"])
    sr5+sr6
    """
    a    33.0
    b     NaN
    c    32.0
    d     NaN
    dtype: float64
    """
    #使上述结果中索引"b"处的值为 21、在索引"d"处的值为34 的方法: add sub mul div  (分别是 加减乘除);如:sr5.add(sr2,fill_value=0) 
    sr5.add(sr6)
    """
    a    33.0
    b     NaN
    c    32.0
    d     NaN
    dtype: float64
    # 不加 fill_value 时, sr5.add(sr6) 和 sr5+sr6 一样的效果
    """
    
    sr5.add(sr6,fill_value=0)  # fill_value 的作用:如果一个Series对象中有某个标签,但另外一个Series对象中没有该标签,那么没有该标签的那个值就被赋值为 fill_value 的值
    """
    a    33.0
    b    11.0
    c    32.0
    d    34.0
    dtype: float64
    """
  • 相关阅读:
    ReadMe文档编写规范
    记录配置GPU遇到的问题
    文本分类流程详细总结(keras)
    打包 SyntaxError:Cannot use import statement outside a module browser_init.js
    SQLServer 转mysql
    Sql Server 查询某月有多少天
    nodejs http是使用异步方式调用接口,通过此方法可以实现同步调用
    linux 编译安装amqp扩展
    记一次 hadoop does not have enough number of replicas问题处理
    ldap+squid 实现
  • 原文地址:https://www.cnblogs.com/neozheng/p/10480815.html
Copyright © 2011-2022 走看看