美文网首页
00.数据结构

00.数据结构

作者: 李慕玄 | 来源:发表于2018-06-29 06:38 被阅读0次

    关于浮点数运算的越界问题

    a = 4.2
    b = 2.1
    a + b
    Out[26]: 6.300000000000001
    
    (a + b) == 6.3
    Out[27]: False
    
    from decimal import Decimal
    a = Decimal('4.2')
    b = Decimal('2.1')
    a + b
    Out[29]: Decimal('6.3')
    
    (a + b) == Decimal('6.3')
    Out[30]: True
    

    1.数据结构

    指相互之间存在n种特定关系的数据类型的集合。学习方法:

    1. 概念:概念是什么?
    2. 定义:如何对其定义?
    3. 限制:使用期有何限制?
    4. 访问:访问其内数据的方式是什么?
    5. 修改: 对其增删查改的方法什么?

    2.Pandas的两种常用数据结构

    类型 注释
    Series 系列
    DataFrame 数据框

    使用前需要将pandas 模块引入

    from pandas import Series, DataFrame
    import pandas as pd
    

    3.Series系列

    类似一维数组(ndarray)的对象,由一组数据(各种NumPy数据类型)以及与之相关的数据标签(索引)组成,用于存储一行或一列数据。

    index A
    0 张三
    1 李四
    2 王五

    Series对象本质上是NumPy的数组,因此NumPy的数组处理函数可以直接对Series使用。但是Series除了可以使用位置作为下标存取元素之外,还可以使用标签下标存取元素,这一点和字典相似。

    每个Series对象都由两个数组组成:

    • index:从NumPy数组继承的Index对象,保存标签信息。
    • values:保存值的NumPy数组。

    3.1 创建Series

    Series同时具有数组和字典的功能,因此它也支持一些字典的方法。

    #创建数组
    In [1]: arr=[1,2,3,4]
    
    #创建Series
    series_1 = Series(arr)
    series_1
    Out[146]: 
    0    1
    1    2
    2    3
    3    4
    dtype: int64
    
    series_2 = Series([1, 2, 3, 4])
    series_2
    Out[148]: 
    0    1
    1    2
    2    3
    3    4
    dtype: int64
    
    series_3 = Series([1, 2, '3', 4, 'a'])
    series_3
    Out[150]: 
    0    1
    1    2
    2    3
    3    4
    4    a
    dtype: object  #类型变成了字符串
    
    #通过字典创建Series
    y=Series({'a':1,'b':2,'c':3})
    y
    Out[19]: 
    a    1
    b    2
    c    3
    dtype: int64
    

    3.2 定义Series

    from pandas import Series
    
    x = Series(
        ['a', True, 1]
    )
    
    Out[34]: x
    0       a
    1    True
    2       1
    dtype: object
    
    x = Series(
        ['a', True, 1],
        index=['first', 'second', 'third']
    )
    
    Out[36]: x
    first        a
    second    True
    third        1
    dtype: object
    

    3.3 访问Series

    from pandas import Series
    
    Out[36]: x
    first        a
    second    True
    third        1
    dtype: object
    
    #用索引访问
    x[1]
    Out[39]: True
    
    #用行标签访问
    x['third']
    Out[40]: 1
    

    3.4 修改Series

    3.4.1 增加与查询

    Out[36]: x
    first        a
    second    True
    third        1
    dtype: object
    
    #增加数据:append()方法,不会修改原值而是返回新值。
    #不允许追加单个值,只允许追加一个Series
    x.append('2')
    TypeError: cannot concatenate a non-NDFrame object
    
    n = Series(['2'])
    x.append(n)
    
    Out[45]: 
    first        a
    second    True
    third        1
    0            2
    dtype: object
    
    #判断值是否在序列中
    #错误方法
    '2' in x
    #正确方法
    '2' in x.values
    
    #序列的切片
    #范围值(索引)切片
    x
    Out[47]: 
    first        a
    second    True
    third        1
    dtype: object
    
    x[1:3]
    Out[46]: 
    second    True
    third        1
    dtype: object
    
    #通过数组指定需要的值
    x[[0, 2, 1]]
    Out[48]: 
    first        a
    third        1
    second    True
    dtype: object
    

    3.4.2 用索引或行标签或值删除值

    x
    Out[49]: 
    first        a
    second    True
    third        1
    dtype: object
    
    x.drop(x.index[0])  #索引
    Out[52]: 
    second    True
    third        1
    dtype: object
    
    x.drop('third')  #行标签
    Out[53]: 
    first        a
    second    True
    dtype: object
    
    x[True != x.values]  #值
    Out[56]: 
    first    a
    dtype: object
    

    3.4.3 修改

    x
    Out[3]: 
    first        a
    second    True
    third        1
    dtype: object
    
    x['first']='b'
    Out[6]: 
    first        b
    second    True
    third        1
    dtype: object
    

    4.DataFrame数据框

    4.1 创建DataFrame

    from pandas import DataFrame
    df = DataFrame({
        'age' : [21, 22, 23],
        'name' : ['Aa', 'Bb', 'Cc'],       
        'sex' : ['F', 'F', 'M']
    })
    
    df
    Out[16]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    

    4.2 查询DataFrame

    4.2.1 查询行标签与列标签

    df
    Out[16]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    #查询行标签
    df.index
    Out[59]: RangeIndex(start=0, stop=3, step=1)
    
    #查询列标签
    df.columns
    Out[58]: Index(['age', 'name', 'sex'], dtype='object')
    

    4.2.2 用列标签[[]]或索引查询

    df
    Out[16]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    df[['name']]
    Out[19]: 
      name
    0   Aa
    1   Bb
    2   Cc
    
    df[['age', 'name', 'sex']]
    Out[17]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    df[1:2]
    Out[55]: 
       age name sex
    1   22   Bb   F
    

    4.2.3 用loc与iloc查询

    df
    Out[16]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    #loc查询:按标签索引,范围包括start和end
    df.loc[2]
    Out[23]: 
    age     23
    name    Cc
    sex      M
    Name: 2, dtype: object
    
    df.loc[1:2]
    Out[24]: 
       age name sex
    1   22   Bb   F
    2   23   Cc   M
    
    #iloc按位置索引,范围不包括end
    df.iloc[1]
    Out[53]: 
    age     22
    name    Bb
    sex      F
    Name: 1, dtype: object
    
    df.iloc[1:2]
    Out[54]: 
       age name sex
    1   22   Bb   F
    
    #iloc进行[行, 列]号查询,范围不包括end
    df.iloc[1:2, 0:1]
    Out[28]: 
       age
    1   22
    

    4.3 修改DataFrame

    4.3.1 增加行和列

    df
    Out[81]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    #增加列
    df['home'] = ['BJ', 'SH', 'GZ']
    Out[83]: 
       age name sex home
    0   21   Aa   F   BJ
    1   22   Bb   F   SH
    2   23   Cc   M   GZ
    

    4.3.2 修改行标签与列标签

    df
    Out[16]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    #修改行标签
    df.index = range(1,4)
    Out[62]: 
       age name sex
    1   21   Aa   F
    2   22   Bb   F
    3   23   Cc   M
    
    #修改列标签
    df.columns = ['age1', 'name1', 'sex1']
    Out[68]: 
       age1 name1 sex1
    0    21    Aa    F
    1    22    Bb    F
    2    23    Cc    M
    

    4.3.3 删除DataFrame

    df
    Out[77]: 
       age name sex
    0   21   Aa   F
    1   22   Bb   F
    2   23   Cc   M
    
    #根据行索引删除行:axis=0代表行
    df.drop(0, axis=0)  #如果行是标签:df.drop('标签', axis=0)
    Out[76]: 
       age name sex
    1   22   Bb   F
    2   23   Cc   M
    
    #根据列标签删除列:axis=1代表列
    df.drop('age', axis=1)
    Out[79]: 
      name sex
    0   Aa   F
    1   Bb   F
    2   Cc   M
    

    相关文章

      网友评论

          本文标题:00.数据结构

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