• 【python数据建模】Pandas库


    概述

    Pandas库主要提供了三种数据结构:
    (1)Series:带标签的一维数据
    (2)DataFrame:带标签且大小可变的二维表结构
    (3)Panel:带标签且大小可变的三维数据
    Pandas 数据结构就像是低维数据的容器。比如,DataFrame 是 Series 的容器,Series 则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。

    Series

    创建对象

    import pandas as pd
    import numpy as np
    
    # 以字典形式给出标签和一维数据
    d = {'a': 1, 'b': 2, 'c': 3}
    ser=pd.Series(d)
    
    # data:传输数据 index:传输标签
    a=np.arange(0,3)
    d=['x','y','z']
    ser=pd.Series(data=a,index=d)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    DataFrame

    创建对象

    import pandas as pd
    import numpy as np
    
    # index是行标签 columns是列标签 默认都是从0开始的正数索引
    d=np.arange(1,10).reshape(3,3)
    a=['A','B','C']
    e=['一','二','三']
    df1=pd.DataFrame(data=d,index=a)
    df2=pd.DataFrame(data=d,index=a)
    df=pd.DataFrame(data=d,index=e,columns=a)
    """
    df
       A  B  C
    一  1  2  3
    二  4  5  6
    三  7  8  9
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    查看数据

    1、查看头部与尾部数据

    # head(n):从头部开始,选取n行数据
    print(df.head(1))
    
    # tail(n):从尾部开始,选取n行数据
    print(df.tail(2))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、显示索引与列名

    # 索引 行标签
    df.index
    """
    Index(['一', '二', '三'], dtype='object')
    """
    # 列名 列标签
    df.columns
    """
    Index(['A', 'B', 'C'], dtype='object')
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、to_numpy():输出不包含行索引和列标签的numpy对象

    df.to_numpy()
    
    • 1

    4、describe():快速查看数据的统计摘要

    df.describe()
    """
             A    B    C
    count  3.0  3.0  3.0
    mean   4.0  5.0  6.0
    std    3.0  3.0  3.0
    min    1.0  2.0  3.0
    25%    2.5  3.5  4.5
    50%    4.0  5.0  6.0
    75%    5.5  6.5  7.5
    max    7.0  8.0  9.0
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    索引

    1 按列标签索引

    print(df['A'])
    """
    一    1
    二    4
    三    7
    Name: A, dtype: int32
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2 按行切片索引

    print(df[0:1])
    """
       A  B  C
    一  1  2  3
    """
    print(df['二':'三'])
    """
       A  B  C
    二  4  5  6
    三  7  8  9
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3 loc方法

    用DataFrame对象的loc方法,同时按列标签和行切片索引

    print(df.loc['二':'三','A'])
    """
    二    4
    三    7
    Name: A, dtype: int32
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4 iloc方法

    用DataFrame对象的iloc方法,用整数or整数数组按位置索引

    print(df.iloc[1,[1,2]])
    """
    B    5
    C    6
    Name: 二, dtype: int32
    """
    print(df.iloc[:,[0,2]])
    """
       A  C
    一  1  3
    二  4  6
    三  7  9
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5 布尔索引

    print(df[df.A>5])
    """
       A  B  C
    三  7  8  9
    """
    print(df[df>5])
    """
         A    B    C
    一  NaN  NaN  NaN
    二  NaN  NaN  6.0
    三  7.0  8.0  9.0
    """
    # isin方法
    print(df[df.isin([4,9])])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    数据输入输出

    CSV

    # 将df写入csv格式文件
    df.to_csv('文件名.csv')
    #读取
    pd.read_csv('文件名.csv')
    
    • 1
    • 2
    • 3
    • 4

    excel

    同cvs,有to_csvread_csv

    类似SQL的聚合函数

    连接:concat

    concat()函数用于连接Pandas对象。
    列标签相同的话,起到一个上下行拼接的效果。列标签不同的话,会变成列拼接,NAN缺失值会补全数据表。

    import pandas as pd
    import numpy as np
    
    d=np.arange(1,10).reshape(3,3)
    a=['A','B','C']
    e=['一','二','三']
    df=pd.DataFrame(data=d,index=e,columns=a)
    df1=pd.DataFrame(data=np.random.rand(3,3),index=e,columns=a)
    print(pd.concat([df,df1]))
    """
              A         B         C
    一  1.000000  2.000000  3.000000
    二  4.000000  5.000000  6.000000
    三  7.000000  8.000000  9.000000
    一  0.970790  0.092893  0.438776
    二  0.580138  0.996153  0.698677
    三  0.554084  0.640035  0.574166
    """
    d=np.arange(1,10).reshape(3,3)
    a=['A','B','C']
    e=['一','二','三']
    df=pd.DataFrame(data=d,index=e,columns=a)
    df1=pd.DataFrame(data=np.random.rand(3,4),index=e)
    print(pd.concat([df,df1]))
    """
         A    B    C         0         1         2         3
    一  1.0  2.0  3.0       NaN       NaN       NaN       NaN
    二  4.0  5.0  6.0       NaN       NaN       NaN       NaN
    三  7.0  8.0  9.0       NaN       NaN       NaN       NaN
    一  NaN  NaN  NaN  0.286544  0.470042  0.229887  0.323514
    二  NaN  NaN  NaN  0.475214  0.994036  0.724422  0.788663
    三  NaN  NaN  NaN  0.231405  0.785781  0.537038  0.576568
    """
    
    • 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

    连接:merge

    跟SQL语句中的join函数一个效果

    import pandas as pd
    import numpy as np
    
    
    left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
    right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
    df=pd.merge(left,right)
    print(df)
    """
       key  lval  rval
    0  foo     1     4
    1  foo     1     5
    2  foo     2     4
    3  foo     2     5
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    分组:groupby

  • 相关阅读:
    Swin Transformer算法解读
    知识图谱内容梳理
    R语言使用pdf函数将多个可视化图像结果保存到pdf文件中(多个图像多页pdf)、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备
    代码随想录二刷 Day50
    python连接自己的机器人接口在微信聊天
    http https http2 http3
    拆解联想普慧算力逻辑链:一次新的场景革命
    JDK内置命令工具
    软考高级系统架构设计师系列论文十六:论软件系统测试及其应用
    springboot基础(69):Controller相关注解
  • 原文地址:https://blog.csdn.net/Yorusimo/article/details/133442588