zoukankan      html  css  js  c++  java
  • Pandas之Series简介

    #jupyter-notebook常用快捷键
    执行当前cell:Ctrl+enter
    插入一个cell:Alt+enter
    新增一个cell:shift+enter
    

    Series介绍

    #1.Series的索引和值
    import numpy as np
    import pandas as pd
    
    s = pd.Series(np.random.rand(5))
    print(s.index)
    print(s.values)
    #可以看出:索引是一个生成器,值是一个nd数组
    
    # .index查看series索引,类型为rangeindex
    # .values查看series值,类型是ndarray
    
    # 核心:series相比于ndarray,是一个自带索引index的数组 → 一维数组 + 对应索引
    # 所以当只看series的值的时候,就是一个ndarray
    # series和ndarray较相似,索引切片功能差别不大
    # series和dict相比,series更像一个有顺序的字典(dict本身不存在顺序),其索引原理与字典相似(一个用key,一个用index)
    
    RangeIndex(start=0, stop=5, step=1)
    [0.31784781 0.78704873 0.61291665 0.03719027 0.71440122]
    0.3178478083913676
    

    创建Series的方法

    #2.创建Series的方法
    pandas.Series(data=None,index=None, dtype=None, name=None, copy=False, fastpath=False)
    #data 需要是一个可排序的可迭代对象,可以是列表,字典,元组,一维数组,一个标量值,但是不能是集合
    #dtype 规定元素的格式,如果有数字有字符串就用object
    #index 数据自带了就用,数据没自带就用自然数,认为规定了就用规定的,如果数据自带了索引你还认为规定索引,就用你的索引生成一堆空值
    #name s.name输出数组的名称,输出格式为str,如果没用定义输出名称,输出为None,rename生成一个新的s对象
    
    data0 = [1,2,3,4,5]
    data1 = {'a':1,'b':2,'c':3,'d':4,'e':5}
    data2 = (1,2,3,4,5)
    data3 = np.random.rand(5)
    data4 = 'a'
    data5 = 1
    s0 = pd.Series(data0,index=list('abcde'))
    s1 = pd.Series(data1,index=list(range(5)))
    s1_1 = pd.Series(data1)
    s2 = pd.Series(data2,index=list('abcde'))
    s3 = pd.Series(data3)
    s4 = pd.Series(data4,index=list(range(5)))
    s5 = pd.Series(data5,index=list(range(5)))
    print(s0,s1,s2,s3,s4,s5)
    # 注意:key肯定是字符串,假如values类型不止一个会得到一个类型为object的类型
    #      如果强行给字典加index,会使用你的index但是值全为空,
    #      单个标量时,s的长度由index控制
    
    a    1
    b    2
    c    3
    d    4
    e    5
    dtype: int64 0   NaN
    1   NaN
    2   NaN
    3   NaN
    4   NaN
    dtype: float64 a    1
    b    2
    c    3
    d    4
    e    5
    dtype: int64 0    0.588359
    1    0.556708
    2    0.857709
    3    0.174475
    4    0.849556
    dtype: float64 0    a
    1    a
    2    a
    3    a
    4    a
    dtype: object 0    1
    1    1
    2    1
    3    1
    4    1
    dtype: int64
    

    Series 索引

    #3.Series:索引使用
    
    # 下标索引,标签索引,切片索引,布尔型索引
    
    #下标索引:按位置取值,只是不能取-1
    s = pd.Series(list(range(5)),index=list('abcde'))
    print(s)
    print(s[0],type(s[0])) #按位置取一个值,返回具体值
    print(s[[0,2]],type(s[[0,2]])) #按位置取多个值,多个值一定要放到一个列表里,返回一个s对象
    
    a    0
    b    1
    c    2
    d    3
    e    4
    dtype: int64
    0 <class 'numpy.int64'>
    a    0
    c    2
    dtype: int64 <class 'pandas.core.series.Series'>
    
    #标签索引:按index取值,和字典取值差不多
    print(s['a'])
    print(s.get(2)) #这里get的使用和字典类似
    print(s[['a','b']])
    
    0
    2
    a    0
    b    1
    dtype: int64
    
    #切片索引:用法和列表的切片类似,[起:终:步长],还可以用index做切片
    print(s[0:3]) #不包含尾部
    print(s['a':'d']) #包含尾部
    
    a    0
    b    1
    c    2
    dtype: int64
    a    0
    b    1
    c    2
    d    3
    dtype: int64
    
    #布尔索引:根据布尔值来取数据
    s = pd.Series(np.random.rand(5)*100)
    s[5] = None
    print(s)
    s1 = s>50 #s1的值就全部变成布尔值了
    print(s1)
    # .isnull() / .notnull() 判断是否为空值 (None代表空值,NaN代表有问题的数值,两个都会识别为空值)
    s2 = s.isnull()
    s3 = s.notnull()
    print(s2)
    print(s3)
    
    0     52.114
    1    39.3662
    2    56.7546
    3    19.6864
    4     4.7018
    5       None
    dtype: object
    0     True
    1    False
    2     True
    3    False
    4    False
    5    False
    dtype: bool
    0    False
    1    False
    2    False
    3    False
    4    False
    5     True
    dtype: bool
    0     True
    1     True
    2     True
    3     True
    4     True
    5    False
    dtype: bool
    

    Series 基本使用

    #4.Series 基本使用
    # 重新索引 / 对齐 / 添加、修改、删除值
    
    #重新索引:得到一个新的s对象,该对象按新索引排序,如果索引有对于值则拿过来用,索引无值默认用NaN填充,fill_value指定填充值
    s = pd.Series([1,2,3,4,5],index=list('abcde'))
    s1 = s.reindex(list('cdefa'))
    s2 = s.reindex(list('cdefa'),fill_value=0)
    print(s)
    print(s1)
    print(s2)
    
    a    1
    b    2
    c    3
    d    4
    e    5
    dtype: int64
    c    3.0
    d    4.0
    e    5.0
    f    NaN
    a    1.0
    dtype: float64
    c    3
    d    4
    e    5
    f    0
    a    1
    dtype: int64
    
    #对齐(加减):两个s对象相加减的时候,自动对齐索引相同的数据,索引不同的数据结果都是NaN
    s1 = pd.Series([1,2,3,4,5],index=list('abcde'))
    s2 = pd.Series([6,7,8,9,0],index=list('cdefg'))
    s3 = pd.Series([1,2,3,4,5])
    s4 = pd.Series([6,7,8,9,0])
    print(s1+s2)
    print(s3+s4)
    print(s1+s3) #两种不同的索引相加
    
    a     NaN
    b     NaN
    c     9.0
    d    11.0
    e    13.0
    f     NaN
    g     NaN
    dtype: float64
    0     7
    1     9
    2    11
    3    13
    4     5
    dtype: int64
    a   NaN
    b   NaN
    c   NaN
    d   NaN
    e   NaN
    0   NaN
    1   NaN
    2   NaN
    3   NaN
    4   NaN
    dtype: float64
    
    #删除值
    s = pd.Series(list(range(5)),index=list('abcde'))
    print(ds1)
    print(s)
    ds2 = s.drop('e') #默认不修改原s对象,并返回一个修改后的对象
    # ds2 = s.drop(0) 这句会报错,因为定义了索引之后,只能用索引值drop
    print(ds2) 
    print(s)
    
    s1 = pd.Series(list(range(5)))
    ds1 = s1.drop(0) #没定义索引的可以这样用
    
    
    
    #增加值,修改值:和字典用法类似
    s['a'] = 100
    s[2] = 200
    s['f'] = 300
    s2 = s.append(pd.Series(list(range(5,9)))) #被append的对象也得是个s对象
    print(s)
    print(s2)
    
    1    1
    2    2
    3    3
    4    4
    dtype: int64
    a    0
    b    1
    c    2
    d    3
    e    4
    dtype: int64
    a    0
    b    1
    c    2
    d    3
    dtype: int64
    a    0
    b    1
    c    2
    d    3
    e    4
    dtype: int64
    a    100
    b      1
    c    200
    d      3
    e      4
    f    300
    dtype: int64
    a    100
    b      1
    c    200
    d      3
    e      4
    f    300
    0      5
    1      6
    2      7
    3      8
    dtype: int64
    
  • 相关阅读:
    JSON, String,Map,实体对象之间的转换
    使用mybatis-plus进行多表的条件查询(模糊查询)
    Netty整合WebSocket的使用
    Java流(stream)的使用
    mysql 查询当天、本周,本月,上一个月的数据......
    第七章 Centos7下Jira-8.16.1的安装
    第六章 JIRA基础介绍
    第五章 Confluence忘记密码
    第四章 Confluence服务的迁移
    第三章 Docker部署Confluence
  • 原文地址:https://www.cnblogs.com/Franciszw/p/13871745.html
Copyright © 2011-2022 走看看