• 基本数据结构



    pandas 中具有两种基本的数据存储结构,存储一维 values 的 Series 和存储二维 values 的 DataFrame ,在这两种结构上定义了很多的属性和方法。

    Series

    Series 一般由四个部分组成,分别是序列的值 data 、索引 index 、存储类型 dtype 、序列的名字 name 。其中,索引也可以指定它的名字,默认为空。

    object 代表了一种混合类型,正如下面的例子中存储了整数、字符串以及元组。此外,目前 pandas 把纯字符串序列也默认认为是一种 object 类型的序列,但它也可以用 string 类型存储。

    创建 Series 数据存储结构

    import pandas as pd
    
    s = pd.Series(data=[100, 'abc', ('张三', '李四')])
    print(s)
    ---------
    0         100
    1         abc
    2    (张三, 李四)
    dtype: object
        
        
    s = pd.Series(data=[100, 'abc', ('张三', '李四')],
                  index=['id', 'score', 'name'])
    print(s)
    ---------
    id            100
    score         abc
    name     (张三, 李四)
    dtype: object
        
        
    s = pd.Series(data=[100, 200, 300],
                  index=['id', 1, ('hp',)])
    print(s)
    ---------
    id       100
    1        200
    (hp,)    300
    dtype: int64
        
        
    s = pd.Series(data=[100, 'abc', ('张三', '李四')],
                  index=pd.Index(['id', 'score', 'name'], name='my_idx'),
                  dtype='object',
                  name='my_name')
    print(s)
    ---------
    my_idx
    id            100
    score         abc
    name     (张三, 李四)
    Name: my_name, dtype: object
            
    
    print(type(s))  # 类型
    ---------
    <class 'pandas.core.series.Series'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    Series 数据存储结构的一些属性

    # 取值
    print(s.values)  # 类型为numpy.ndarray
    ---------
    [100 'abc' ('张三', '李四')]
    
    # 获取索引
    print(s.index)
    ---------
    Index(['id', 'score', 'name'], dtype='object', name='my_idx')
    
    # 获取类型
    print(s.dtype)
    ---------
    object
    
    # 获取该序列名称
    print(s.name)
    ---------
    my_name
    
    # 获取该序列长度
    print(s.shape)
    (3,)
    
    # 取单个索引对应的值
    print(s['score'])
    ---------
    abc
    
    # 可以对该序列进行for循环
    for i in s:
        print(i)
    ---------
    100
    abc
    ('张三', '李四')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    DataFrame

    DataFrame 在 Series 的基础上增加了列索引,一个数据框可以由二维的 data 与行列索引来构造。

    创建 DataFrame 数据存储结构

    import pandas as pd
    
    data = [[1, 'a', 1.5], [2, 'b', 2.5], [3, 'c', 3.5]]
    df = pd.DataFrame(data=data)
    print(df)
    ---------
       0  1    2
    0  1  a  1.5
    1  2  b  2.5
    2  3  c  3.5
    
    
    data = [[1, 'a', 1.5], [2, 'b', 2.5], [3, 'c', 3.5]]
    df = pd.DataFrame(data=data,
                      index=['row_%d' % i for i in range(3)],
                      columns=['col_%d' % i for i in range(3)])
    print(df)
    ---------
           col_0 col_1  col_2
    row_0      1     a    1.5
    row_1      2     b    2.5
    row_2      3     c    3.5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    但一般而言,更多的时候会采用从列索引名到数据的映射来构造数据框,同时再加上行索引。

    df = pd.DataFrame(data={'col_0': [1, 2, 3], 'col_1': ['a', 'b', 'c'], 'col_2': ['张三', '李四', '陈五']},
                      index=['row_%d' % i for i in range(3)])
    print(df)
    ---------
           col_0 col_1 col_2
    row_0      1     a    张三
    row_1      2     b    李四
    row_2      3     c    陈五
    
    
    print(type(df))  # 类型
    ---------
    <class 'pandas.core.frame.DataFrame'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    由于这种映射关系,在 DataFrame 中可以用 [col_name] 与 [col_list] 来取出相应的列与由多个列组成的表,结果分别为 Series 和 DataFrame 。

    print(df['col_2'])  # 
    ---------
    row_0    张三
    row_1    李四
    row_2    陈五
    Name: col_2, dtype: object
    
    
    print(df[['col_0', 'col_1']])  # 
    ---------
           col_0 col_1
    row_0      1     a
    row_1      2     b
    row_2      3     c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    与 Series 类似,在数据框中同样可以取出相应的属性。

    DataFrame 数据存储结构的一些属性

    # 取值
    print(s.values)  # 类型为numpy.ndarray
    ---------
    [[1 'a' '张三']
     [2 'b' '李四']
     [3 'c' '陈五']]
    
    # 获取行索引
    print(df.index)
    ---------
    Index(['row_0', 'row_1', 'row_2'], dtype='object')
    
    # 获取列索引
    print(df.columns)
    ---------
    Index(['col_0', 'col_1', 'col_2'], dtype='object')
    
    # 获取类型
    print(df.dtypes)
    ---------
    col_0     int64
    col_1    object
    col_2    object
    dtype: object
        
    # 获取二维表形状
    print(df.shape)
    ---------
    (3, 3)
    
    # 通过 .T 可以把 DataFrame 进行转置
    print(df.T)
    ---------
          row_0 row_1 row_2
    col_0     1     2     3
    col_1     a     b     c
    col_2    张三    李四    陈五
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    设计模式-命令模式
    Git版本管理
    express演示前端解决跨域的方法jsonp、cors
    JVM——二、内存结构
    Socks5代理和代理IP:网络工程师的多面利器
    【面试经典150 | 双指针】两数之和
    NextJs 数据篇 - 数据获取 | 缓存 | Server Actions
    右击显示Pycharm打开教程
    【C++面向对象程序设计】类与对象(中)
    SpringBoot&Vue&EmementUI前后端分离整合、统一封装axios、跨域配置
  • 原文地址:https://blog.csdn.net/weixin_48158964/article/details/126077137