当前位置: 首页 > article >正文

【Python】Pandas基础操作手册(上)

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ  


今天给大家带来的是【Python】Pandas基础操作手册(上)本次主要讲解, python pandas 模块的一些基本概念, 以及了解 Dataframe 对象的创建, 赋值, 保存. 一起来看看叭~


本期收录于博主的专栏:JavaSE_保护小周ღ的博客-CSDN博客

适用于编程初学者,感兴趣的朋友们可以订阅,查看其它 “JavaSE基础知识”。

更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘ 


一、Pandas 是啥?

Pandas 是一个开源的 Python 数据分析库,主要用于数据操作和数据分析。它提供了高效、灵活的数据结构和函数,使得数据处理变得更加便捷。Pandas 主要包含两个核心数据结构

  1. Series一维数组,类似于 Python 的列表或 NumPy 的一维数组,可以存储任意类型的数据,还支持索引。 形如: 

  1. DataFrame:二维表格,类似于电子表格或数据库表,可以看作是多个 Series 的集合。DataFrame 支持列名和行索引,方便数据的存储和访问。形如: 

Pandas 的主要功能

  • 数据清洗:处理缺失值、重复数据、格式转换等。
  • 数据选择和过滤:根据条件选择特定的数据。
  • 数据聚合和分组:对数据进行分组并进行求和、平均等计算。
  • 数据合并:将多个 DataFrame 进行合并或连接。
  • 时间序列分析:处理时间序列数据,提供丰富的时间日期功能。

应用领域

Pandas 广泛应用于数据科学、金融、统计分析、机器学习等领域,是数据分析和数据科学工作流中不可或缺的工具之一。


二、Pandas 相关操作

2.1 使用环境

集成开发环境: PyChorm 

如何引入Pandas: 

你可以在命令行中使用以下命令临时指定阿里云源下载安装:

pip install pandas -i https://mirrors.aliyun.com/pypi/simple/

 导入模块: 

import pandas as pd

在 Python 中,导入模块时常用的一些关键字和语法包括:

1import :  用于导入整个模块。

2from ... import . . .   用于从模块中导入特定的属性或函数。

3. as : 用于给模块或导入的函数/类指定一个别名。

接下里我们就可以愉快的学习 Pandas 啦~


2.1 声明一个DataFrame对象并赋值

: pd.DataFrame 则是声明 dataframe 对象的类型, 以便可以调用方法(pyhton 是解释型语言, 如果不提前声明, 则需要解释到该行代码才能知道他的类型).

if __name__ == "__main__":
    # 声明一个 dataframe 对象
    dataframe: pd.DataFrame = pd.DataFrame()

2.1.1 DataFrame 直接赋值

当前标题的主要目的, 为了让大家了解其定义, 以及背后的数据结构, 没有太大的意义, 接下来是有意义的操作.

# 创建一个包含数据的字典(也就是 map 结构的数据)
    data = {
        '姓名': ['张三', '李四', '王五'],
        '年龄': [25, 30, 22],
        '邮箱': ['zhangsan@example.com', 'lisi@example.com', 'wangwu@example.com']
    }

    # 声明一个 DataFrame 对象并赋值
    df = pd.DataFrame(data)

 你可以这样写: 

# 声明一个 DataFrame 对象并赋值
    df = pd.DataFrame({
            '姓名': ['张三', '李四', '王五'],
            '年龄': [25, 30, 22],
            '邮箱': ['zhangsan@example.com', 'lisi@example.com', 'wangwu@example.com']
        })


2.1.2 定义一个 Series(列)

# 声明一个 DataFrame 对象并赋值
    df = pd.DataFrame({
            '姓名': ['张三', '李四', '王五'],
            '年龄': [25, 30, 22],
            '邮箱': ['zhangsan@example.com', 'lisi@example.com', 'wangwu@example.com']
        })
    print(df)

# 创建一个新的 Series (其参数是 list,  [] 列表)
    jobs_eries = pd.Series(['工程师', '医生', '教师'], name='职业')

    # 将 Series 添加到 DataFrame, 就这样水灵灵的添加了一列
    df['职业'] = jobs_eries

    # 打印
    print(df)

 点击打开之后则是如下展示内容: 


正常情况下 dataframe 对象的数据来源于外部文件什么的,  常用的话, 操作有从  excel 表. csv文件, JSON, sql, API, 中获取数据, 也有的从 其他  dataframe 数据合并... 加入进来的.

2.1.3 DataFrame 从 Excel 中获取数据

# 读取
import openpyxl
# 保存
from openpyxl.utils.dataframe import dataframe_to_rows
通过 pandas 提供的 read_excel 方法可以从 excel 中读取数据,  第一个参数为 excel表的路径
    # 通过 pandas 提供的 read_excel 方法可以从 excel 中读取数据,
    # 第一个参数为 excel 的路径
    #  sheet_name 参数则是指定读取那个 excel表中 sheet 对象
    # 如果没有指定, sheet_name 参数默认读取, Sheet1 对象的值
    df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

以下的是一些其他的常用参数, 用的最多的还是  sheet_naem 和 header 

常用参数

  • sheet_name: 要读取的工作表名称或索引,默认为第一个工作表。
  • header: 指定行号作为列名,默认为 0
  • index_col: 指定用作行索引的列。
  • usecols: 指定要读取的列,可以是列名或列索引。
  • dtype: 指定列的数据类型。

注意事项

  • 需要安装 openpyxl 或 xlrd 库来支持 Excel 文件的读取。
  • Excel 文件中的空行可能会导致数据读取不一致(后面讲)。

2.1.4 DataFrame 从 CSV文件 中获取数据

CSV(Comma-Separated Values,逗号分隔值)文件是一种广泛使用的纯文本文件格式,用于存储表格数据。CSV 文件通常用于数据导入和导出,特别是在不同软件和数据库之间传输数据时。以下是关于 CSV 文件的详细介绍及其格式特点。

1. CSV 文件的基本概念

  • 定义:CSV 文件是一种将数据以文本形式存储的格式,使用特定的分隔符(通常是逗号)将数据项分隔开来。
  • 用途:CSV 文件通常用于数据交换、数据分析和数据存储,支持多种应用程序,如电子表格软件(Excel)、数据库管理系统(如 MySQL、PostgreSQL)和编程语言(如 Python、R)。

2. CSV 文件的格式

CSV 文件具有以下基本格式特征:

  • 行与列:数据被组织成行和列。每一行代表一条记录,而每一列代表记录中的一个字段(或属性)。
  • 分隔符:默认情况下,字段使用逗号(,)分隔,但也可以使用其他分隔符,如制表符(\t)、分号(;)等。
  • 第一行:通常,CSV 文件的第一行包含列名(即字段名),用于描述每列数据的内容。
  • 文本引用:当字段包含分隔符、换行符或引号时,字段值通常用双引号(")括起来。例如:"John, Doe"
  • 缺失值:缺失的数据项可以用空字符串表示,通常会留出一个位置,表示该列没有数据。

3. 示例

以下是一个简单的 CSV 文件示例:

Name,Age,Occupation
John Doe,29,Software Engineer
Jane Smith,34,Data Scientist
"Bob, Jr.",25,"Intern, Marketing"

在这个示例中:

  • 第一行包含列名 NameAge 和 Occupation
  • 随后的每一行代表一个人的记录。
  • 注意 "Bob, Jr." 和 "Intern, Marketing" 中的逗号被双引号括起来,以避免被误解析为分隔符。

4. CSV 文件的优缺点

优点

  • 简单易用:CSV 格式直观、易于理解,适合大多数用户。
  • 广泛支持:几乎所有数据处理工具和编程语言都支持 CSV 文件的读写。
  • 可读性:作为纯文本文件,CSV 文件可以使用任何文本编辑器打开和编辑

缺点

  • 缺乏约束:CSV 文件不支持数据完整性约束(如主键、外键约束等),这可能导致数据重复或不一致。例如,如果同一条记录被多次导入,可能无法自动检测并防止这种情况。
  • 格式不统一:不同的应用程序可能对 CSV 的解析和格式化有不同的处理方式,导致同一文件在不同系统上可能出现读取错误或数据损坏。
  • 无法保留数据类型:CSV 文件中的所有数据都被视为文本,无法直接存储数据类型信息(如整数、日期、布尔值等)。这可能导致在导入数据时出现错误或需要进行额外的转换。
  • 格式化信息丢失:例如,在电子表格应用程序中,单元格可能具有特定的格式(如货币、百分比等),而 CSV 文件无法保留这些格式化信息。
  • 不支持复杂数据结构


 通过 pandas 提供的 read_csv 方法可以从 csv文件 中读取数据, 第一个参数为 csv 文件的路径

df = pd.read_csv('data.csv', **kwargs)

 **kwargs 是一种用于传递可变数量的关键字参数的语法。它的全称是 "keyword arguments",使得函数可以接收任意数量的命名参数。

当你调用 pd.read_csv 函数时,可以使用 **kwargs 来传递其他参数,比如:

df = pd.read_csv('data.csv', sep=',', header=0, index_col=None)

这里的 sep=','header=0index_col=None 都是关键字参数。如果你把这些参数放在 **kwargs 中传递,可以这样写:

params = {
        'sep': ',',
        'header': 0,
        'index_col': None
    }

df = pd.read_csv('data.csv', **params)

常用参数

  • sep: 指定分隔符,默认为 ',',可以设置为 '\t'(制表符)等。
  • header: 指定行号作为列名,默认为 0。设置为 None 时不使用任何行作为列名。
  • index_col: 指定用作行索引的列,可以是列名或列的索引。
  • dtype: 指定列的数据类型。
  • na_values: 自定义缺失值的标识。

注意事项

  • 确保文件路径正确。
  • 大文件可能会占用较多内存,可以使用 chunksize 参数按块读取。

使用 CSV 文件呢, 相较于 excel 文件来说, 更加轻量, 如果单纯的执行数据存取, 中转操作, CSV 将是不二之选, 但是, 如果程序运行的结果要给领导康康的话, 还是保存为 excel 文件 方便查阅~


2.1.5 DataFrame 从 JSON 中获取数据

在 python 中, 字典类型的数据 和  JSON 数据是可以互相转换的

1. 字典转换为 JSON

要将 Python 字典转换为 JSON 字符串,可以使用 json.dumps() 函数。

import json

# 定义一个 Python 字典
data = {
    "name": "Alice",
    "age": 30,
    "city": "New York",
    "is_student": False,
    "courses": ["Math", "Science"],
}

# 将字典转换为 JSON 字符串
json_string = json.dumps(data)

# 打印 JSON 字符串
print("JSON 字符串:")
print(json_string)

2. JSON 转换为字典 

要将 JSON 字符串转换为 Python 字典,可以使用 json.loads() 函数。

import json 

# 1. 字典转换为 JSON
    data = {
        "name": "Alice",
        "age": 30,
        "city": "New York",
        "is_student": False,
        "courses": ["Math", "Science"],
    }

    # 将字典转换为 JSON 字符串
    json_string = json.dumps(data)
    print("JSON 字符串:")
    print(json_string)

    # 2. JSON 转换为字典
    data_dict = json.loads(json_string)
    print("\nPython 字典:")
    print(data_dict)


通过 pandas 提供的 read_json 方法可以从 excel 中读取数据, 第一个参数为  json 文件的路径也可以是 json 对象

df = pd.read_json('data.json', **kwargs)

同时, 也是支持 **kwargs 格式的传参(详情可见上文 csv部分) 即:

params = {
        'orient': 'split',
        'convert_dates': True,
    }

df = pd.read_json('data.json', **params)

常用参数

  • orient: 指定 JSON 数据的格式,常用值包括 'split''records''index''columns''values'
  • dtype: 指定列的数据类型。
  • convert_dates: 指定是否将字符串转换为日期,默认为 True

注意事项

  • 确保 JSON 数据格式正确,避免解析错误。
  • 大的 JSON 文件可能会占用大量内存。

2.1.6 DataFrame 从 数据库 中获取数据

前提条件

  1. 确保已安装 pandasSQLAlchemy 库,可以使用以下命令安装:

    pip install pandas sqlalchemy
  2. 需要有一个可用的 SQL 数据库(例如 SQLite、MySQL、PostgreSQL 等)和相应的连接信息。

下面是一个示例,展示如何从 mysql  数据库读取数据。假设我们有一个名为 employees.db 的数据库,里面有一个名为 employees 的表。

# 创建数据库连接
    
    # 数据库连接配置
    username = 'your_username'
    password = 'your_password'
    host = 'your_host'
    port = 'your_port'  # 通常是 3306
    database = 'your_database'
    
    engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}')

    # SQL 查询语句
    sql_query = 'SELECT * FROM employees'

    # 使用 pd.read_sql 从 SQL 数据库读取数据到 DataFrame
    df = pd.read_sql(sql_query, engine)

    # 显示 DataFrame 的前几行
    print(df.head())

常用参数

  • con: 数据库连接对象。
  • index_col: 指定用作行索引的列。
  • params: SQL 查询的参数。
  • coerce_float: 将字符串转换为浮点数,默认为 True

注意事项

  • 确保 SQL 查询语句正确,避免 SQL 注入风险。
  • 使用连接池来提高性能。

正常情况下, 我们是不会采用这种方式来操作数据库的,  而是通过请求后端提供的  API 来操作数据库, 也是为了数据库安全考虑, 以及规范~~~


2.1.7 DataFrame 从 API 中获取数据

这种方式也是, 也是在实际应用中非常常见的操作一切操作还会在后端留痕, 更加安全嘛.

准备工作

在开始之前,请确保你已经安装了请求库。

  • Requests:一个简单易用的 HTTP 客户端库。

可以使用以下命令安装 requests 库:

pip install requests

其次, 需要提供一个可以访问的  API , 提供数据来源, 可能返回一个 json, 也可能返回一个 excel 呢,这个要看双方的约定是啥样的.

import requests

# API 端点(举例)
url = "https://jsonplaceholder.typicode.com/posts"

# 发起 GET 请求
response = requests.get(url)

# 检查请求是否成功
if response.status_code == 200:
    # 解析 JSON 数据, 有可能是别的啥格式, 具体看约定
    data = response.json()
    print(data)
else:
    print(f"请求失败,状态码: {response.status_code}")

总之这一快, 主要是  request 模块的内容的, 感兴趣的朋友可以去了解一下(博主还没有写这一块的博客).


2.3  将 ''nan''  转换为  ‘’ (空字符)

在 Pandas 的 DataFrame 中,NaN(Not a Number)值表示缺失或无效的数据NaN 值的出现通常有以下几种原因:

  1. 数据缺失

    数据在收集或录入过程中可能会丢失。例如,用户未填写某个字段,或者在数据抓取过程中部分数据未能成功获取。
  2. 计算结果

    某些计算操作可能会产生 NaN 值。例如,尝试对零进行除法、计算无穷大与无穷大的差等情况都会导致 NaN
  3. 合并操作

    在进行 DataFrame 的合并(如 merge 或 join)时,如果某些键在一侧缺失,则结果中的相应值会被填充为 NaN
  4. 数据类型转换

    在尝试将某种类型的数据转换为另一种类型时,如果转换失败,Pandas 可能会将结果设置为 NaN。例如,尝试将字符串转换为数值时,遇到无法转换的字符串。
  5. 缺省值

    在创建 DataFrame 时,可以指定缺省值为 NaN,以便于后续的数据处理和分析。例如,可以通过 NumPy 的 np.nan 来初始化 DataFrame 的某些元素。

 举个例子: 

第一步:

使用 pandas 将学生表的 sheet1 工作簿的数据读取成一个 dataframe 的对象在内存中.

所以像这种情况, 在内存中出现了 NaN值,  在数据计算中, 或者使用都是不方便的, 那么以下是常用的几种方法.

在数据分析过程中,处理 NaN 值是很常见的任务。Pandas 提供了多种方法来处理这些缺失值,例如:

dropna():删除含有 NaN 的行或列。

fillna(value):用指定的值填充 NaN

isna() 或 isnull():检查哪些位置是 NaN

在 Pandas 中,isna()isnull() 方法用于检查 DataFrame 或 Series 中哪些位置是 NaN(缺失值)。这两个方法的功能相同,可以互换使用。它们返回一个布尔型的 DataFrame 或 Series,其中 True 表示该位置是 NaNFalse 表示该位置不是 NaN

  • 定位缺失值:可以通过布尔索引直接定位缺失值的位置。

missing_values = dataframe[dataframe.isna().any(axis=1)]
print("\n包含 NaN 的行:")
print(missing_values)


 2.4 DataFrame 的保存

Pandas DataFrame 可以保存为多种格式,以便于数据的持久化和共享。以下是一些常用的保存格式及其对应的函数:

2.4.1 CSV 格式

  • 函数to_csv()
  • 示例
    df.to_csv('data.csv', index=False)
    • index=False 表示不保存行索引。

2.4.2 Excel 格式

  • 函数to_excel()
  • 示例
    df.to_excel('data.xlsx', index=False)
    • 需要安装 openpyxl 或 xlsxwriter 库来支持 Excel 格式。
def saveDFToExcelSheet(df: pd.DataFrame, target_path, sheet_name):
    """
    将 dataFrame 数据存入指定的 路径下的 excel表 sheet中.
    :param df: 保存的 pandas 对象
    :param target_path: 目标文件的路径
    :param sheet_name: 要保存为的 sheet 的名字
    :return:
    """
    # 检查目标文件是否存在
    try:
        workbook = openpyxl.load_workbook(target_path)
    except FileNotFoundError:
        # 如果文件不存在,则创建一个新的工作簿
        workbook = openpyxl.Workbook()

    # 检查 sheet_name 是否已经存在
    if sheet_name in workbook.sheetnames:
        # 如果已经存在,则将新建的工作表重命名
        new_sheet_name = sheet_name + "_new"
        new_sheet = workbook.create_sheet(new_sheet_name)
    else:
        # 如果不存在,则直接创建新的工作表
        new_sheet = workbook.create_sheet(sheet_name)

    # 将 DataFrame 中的数据写入工作表
    for row in dataframe_to_rows(df, index=False, header=True):
        new_sheet.append(row)

    # 保存工作簿到目标文件
    workbook.save(target_path)
    print("sheet 对象已成功保存至指定 excel 中")

2.4.3. JSON 格式

  • 函数to_json()
  • 示例
    df.to_json('data.json', orient='records', lines=True)
    • orient 参数可以设置不同的格式,records 是常用的格式之一。

也可以通过 SQL 保存到数据库, 但是不推荐 pandas 直接操作数据库, 而是通过 requets 模块发送请求调用后端提供的 API 间接的操作数据库, 当然最主要的数据结构还是 json 啦.


 好了,到这里,【Python】Pandas基础操作手册(上)博主已经分享完了,阐述较为基础,  希望对大家有所帮助,如有不妥之处欢迎批评指正。 

下期预告: 【Python】Pandas基础操作手册 (下)  将详细描述针对 Dataframe 对象的"增删查改"

感谢每一位观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

遇见你,所有的星星都落在我的头上……


http://www.kler.cn/news/358890.html

相关文章:

  • 开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序助力社交电商新发展
  • 格式化后数据恢复全解析
  • 垂起固定翼无人机挂载迫击抛投器技术详解
  • Java爬虫:获取数据的入门详解
  • Dongle Sentinal在Jenkins下访问不了的问题
  • 苍穹外卖学习笔记(三十)
  • C#实战|人员管理系统[11]:实现系统退出前二次确认
  • 祝贺深圳易图讯科技承建甘肃庆阳市林业和草原局森林防火三维电子沙盘上线运行
  • Leetcode 3326. Minimum Division Operations to Make Array Non Decreasing
  • 【Linux】Linux进程控制
  • 音乐播放器-0.专栏介绍​
  • OpenHarmony4.1如何添加默认应用?触觉智能瑞芯微RK3566鸿蒙开发板演示
  • EasyX图形库的安装
  • 基于SSM机场网上订票系统的设计
  • AXI GPIO按键控制——ZYNQ学习笔记4
  • firewalld 防火墙常用命令
  • URL+Tcp/IP+Http Https
  • 大学英语四级作文模板万能句型开头主体结尾PDF
  • Ubuntu系统安装Docker
  • BUG-AttributeError: ‘EnforcedForest‘ object has no attribute ‘node‘