• Pandas光速入门-一文掌握数据操作


    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

    在这里插入图片描述

    简介


    Pandas是Python的一个强大的数据分析库,是基于NumPy开发的。可以支持从各种格式的文件中导入数据,比如CSV、EXCEL、JSON、SQL等,并提供了两种数据结构Series和DataFrame,可以方便的对数据进行操作运算清洗加工等。

    对了,与Python取自蟒蛇不同,Pandas取自Panel Data & Python Data Analysis(面板数据与Python 数据分析),而不是熊猫(doge)。

    本文主要参考pandas文档
    Python环境搭建-从安装到Hello World

    安装


    如果使用pip安装:

    pip install pandas
    
    • 1

    如果使用conda安装:

    conda install pandas
    
    • 1

    如果使用的是Pycham,可以直接打开File->settings->Project:->Python Interpreter中安装库。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    可以打印pandas版本号即安装成功(●’◡’●)

    import pandas as pd
    print(pd.__version__)
    
    • 1
    • 2

    一般定义别名pd
    在这里插入图片描述

    数据结构


    Paddas定义了两个数据结构Serise和DataFrame。

    • Serise

    Serise表示一维数据,可以理解位一维数组,或一列。
    在这里插入图片描述

    使用函数pandas.Series(data, index, dtype, name, copy)创建,介绍其中两个主要参数:1、data,数据源;2、index(可选),索引,默认从数字0开始,也可以自定义索引。

    举个栗子:

    import pandas as pd
    
    data = ["点赞", "收藏", "评论"]  # 定义数据
    var = pd.Series(data)  # 创建一个Series型变量var
    print(var)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    自定义索引例子:

    import pandas as pd
    
    data = ["点赞", "收藏", "评论"]
    var = pd.Series(data, index=["a", "b", "c"])  # 指定索引为a、b、c
    print(var)
    print(var["a"])  # 打印索引a对应数据
    
    print("----------")
    data2 = {"a": "点赞", "b": "收藏", "c": "评论"}
    var2 = pd.Series(data2)  # 等价于使用key-value数据
    print(var2["b"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    更多属性和方法可以用的时候查阅文档,不便赘述,后同。

    • DataFrame

    DataFrame表示二维数据,即二维数组,或表格。是由若干列Series组成的,每列的数据类型可以不同。
    在这里插入图片描述

    使用函数pandas.DataFrame(data, index, columns, dtype, copy)创建,data和index参数同Series,columns是列名,其实对应Series中的name。

    import pandas as pd
    
    data = [['Alice', 18], ['Bob', 20]]
    var = pd.DataFrame(data, columns=['Name', 'Age'])  # 指定列名
    print(var)
    print("----------")
    print(var['Name'])  # 打印指定列
    print("----------")
    print(var.loc[0])  # 打印第一行
    
    # 与上等价
    data2 = {'Name': ['Alice', 18], 'Age': ['Bob', 20]}
    var2 = pd.DataFrame(data2)  # 等价同上
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    数据读写


    上面的数据是直接定义的,但实际场景往往是从文件中读写数据,pandas可以支持很多文件格式,读取文件函数一般命名是read_*(路径),比如常用的CSV文件读取使用函数read_csv(),类似的写文件函数是to_*(路径)。

    在这里插入图片描述在这里插入图片描述

    这里以Kaggle中鸢尾花数据为例(下载链接),将文件解压到D盘。可以使用绝对路径D:\Iris_flower_dataset.csv,也可以将文件放在项目根目录下直接使用相对路径即可。

    import pandas as pd
    
    data = pd.read_csv("D:\\Iris_flower_dataset.csv")
    print(data)
    print("----------")
    print(data.to_string())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/
    读写其他格式的文件也是一样的,也可以从格式A读取后写成格式B文件,排列组合。

    import pandas as pd
    
    data = pd.read_csv("D:\\Iris_flower_dataset.csv")
    print(data.to_numpy())  # 转成numpy
    data.to_json("D:\\Iris_flower_dataset.json")  # 写为json文件
    data.to_xml("D:\\Iris_flower_dataset.xml")  # 需要lxml库支持 pip install lxml
    data.to_excel("D:\\Iris_flower_dataset.xlsx")  # 需要openpyxl库支持 pip install openpyxl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    在这里插入图片描述

    数据运算


    如果学过关系型数据库SQL的话,就很好理解。pandas对表的操作大多都支持,比如连接、合并、分组等操作。

    比如函数concat(objs, axis, join, ignore_inde, keys, levels, names, verify_integrity, sort, copy)连接合并数据,主要参数objs表示数据;axis默认0表示以行为连接轴,为1表示以列为连接轴;join可以选外连接outer(默认)和内连接inner;ignore_inde默认Fasle,为True则忽略原索引;keys设置外层索引等;names设置索引名;

    import pandas as pd
    # 合并数据
    s1 = pd.Series(['a', 'b'])
    s2 = pd.Series(['c', 'd'])
    print(pd.concat([s1, s2]))
    # 忽略原索引
    print("----------")
    print(pd.concat([s1, s2], ignore_index=True))
    # 设置外层索引
    print("----------")
    print(pd.concat([s1, s2], keys=['s1', 's2']))
    # 设置索引名
    print("----------")
    print(pd.concat([s1, s2], keys=['s1', 's2'], names=['Series name', 'Row ID']))
    # 外连接
    print("----------")
    df1 = pd.DataFrame(
        {
            "A": ["A0", "A1", "A2", "A3"],
            "B": ["B0", "B1", "B2", "B3"],
            "C": ["C0", "C1", "C2", "C3"],
            "D": ["D0", "D1", "D2", "D3"],
        },
        index=[0, 1, 2, 3],
    )
    df2 = pd.DataFrame(
        {
            "B": ["B2", "B3", "B6", "B7"],
            "D": ["D2", "D3", "D6", "D7"],
            "F": ["F2", "F3", "F6", "F7"],
        },
        index=[2, 3, 6, 7],
    )
    print(pd.concat([df1, df2], axis=1))
    # 内连接
    print("----------")
    print(pd.concat([df1, df2], axis=1, join="inner"))
    
    • 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

    在这里插入图片描述

    使用函数groupby(by, axis, level, as_index, sort, group_keys, squeeze, observed, dropna)进行分组聚合,主要参数by设置需要映射的列;axis默认0表示以行为连接轴,为1表示以列为连接轴;level指定多层索引的组;dropna默认True删除含NA的行和列,为False则不删NA的行列。
    然后可以对分组进行相关操作,如求和、平均数、最小最大值等等。

    import pandas as pd
    
    # 以Animal分组求Max Speed平均数
    df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                                  'Parrot', 'Parrot'],
                       'Max Speed': [380., 370., 24., 26.]})
    print(df)
    print(df.groupby(['Animal']).mean())
    # 是否显示NaN
    print("----------")
    l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]
    df2 = pd.DataFrame(l, columns=["A", "B", "C"])
    print(df2)
    print(df2.groupby(['B']).sum())
    print(df2.groupby(['B'], dropna=False).sum())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    数据清洗


    数据清洗是对一些无用的数据进行处理,以免影响实验结果,比如空值、错误格式、错误数据、重复数据等。

    • 空值

    对于空值,我们可以使用dropna()函数进行删除,或者使用fillna()函数对空值进行填充,比如可以填充平均数mean()、中位数median()、众数mode()或自定义等。

    DataFrame.dropna(axis, how, thresh, subset, inplace)其中axis默认为0,表示逢空值删除整行,置为1则删除整列;how默认为 ‘any’ 如果一行(或列)有任何一个 NA 就去掉整行,置为’all’则 一行(或列)都是 NA 才去掉这整行;subset:指定要检查的列;inplace默认False,表示返回一个新的DataFrame,否则返回None并覆盖原数据。

    import pandas as pd
    
    df = pd.DataFrame([1, None, 3, 5], columns=["value"])
    print(df)
    # 删除空值
    print("----------")
    print(df.dropna())
    # 填充空值
    print("----------")
    mid = df.median()  # 计算中位数
    print(df.fillna(mid))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    • 错误格式

    比如使用to_datetime()函数统一日期,to_numeric()统一浮点数,to_timedelta()统一时间。

    import pandas as pd
    
    # 统一日期格式
    df = pd.DataFrame(['2022/9/01', '2022-09-02', '20220903'], columns=["Date"])
    print(pd.to_datetime(df['Date']))
    # 统一浮点数
    print("----------")
    df2 = pd.DataFrame(['20.2', '2022'], columns=["Number"])
    print(pd.to_numeric(df2['Number']))
    # 统一实际格式
    print("----------")
    df3 = pd.DataFrame(['1 days 06:05:01', '15.5s', '1h'], columns=["Time"])
    print(pd.to_timedelta(df3['Time']))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    • 错误数据

    可以使用drop()删除,或者loc()修改。根据实际场景进行操作即可。

    import pandas as pd
    
    person = {
        "name": ['AlicE', 'Bob', 'CASEY'],
        "age": [18, 340, 22]
    }
    df = pd.DataFrame(person)
    # 删除年龄>120的
    for x in df.index:
        if df.loc[x, "age"] > 120:  #loc[行索引,列名]
            df.drop(x, inplace=True)
    # 修改名字为小写
    for x in df.index:
        df.loc[x, "name"] = df.loc[x, "name"].lower()
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    • 重复数据

    使用drop_duplicates() 函数可以直接删除重复值。

    import pandas as pd
    
    person = {
        "name": ['AlicE', 'Bob', 'Bob'],
        "age": [18, 34, 34]
    }
    df = pd.DataFrame(person)
    print(df.drop_duplicates())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    数据可视化


    pandas里的plot()函数其实是对Matplotlib的封装,具体的绘图可参考我这篇博客:Matplotlib光速入门-从安装到绘图实战,这边简单举个例子就润了。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Series
    ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
    ts = ts.cumsum()
    ts.plot()
    # DataFrame
    df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
    df = df.cumsum()
    df.plot()
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    原创不易,请勿转载本不富裕的访问量雪上加霜
    博主首页:https://wzlodq.blog.csdn.net/
    来都来了,不评论两句吗👀
    如果文章对你有帮助,记得一键三连❤

  • 相关阅读:
    C语言环境变量和错误处理
    SSL证书在HTTP与HTTPS中的角色差异是什么?
    C#/VB.NET 实现Word和ODT文档相互转换
    Windows桌面自动化测试工具:WinAppDriver
    为什么定时发朋友圈会更有效呢?
    【编程之路】Python编程实例解析
    git命令
    科普:分发文件软件(高人气爆款甄选)
    Canoe工具使用-通道重映射
    效率翻倍:使用 ERP 系统自动执行这 5 项任务
  • 原文地址:https://blog.csdn.net/qq_45034708/article/details/126894800