Python_AI库 Pandas的数据结构及基本操作

Python_AI库 Pandas的数据结构及基本操作

本文默认读者具备以下技能:

  • 熟悉python基础知识,vscode或其它编辑工具
  • 熟悉表格文件的基本操作
  • 具备自主扩展学习能力

本文篇幅较长,但比较重要,希望读者可以认真看完并实例运行。
在这里插入图片描述

Pandas提供了两种主要的数据结构,它们分别是Series、DataFrame,它们都是建立在Numpy数组之上,因此运行速度很快。以下是对这三种数据结构的详细介绍:

  1. Series

    • 一维带标签的同质数组,大小不可变。
    • 可以将标量值、字典、列表等作为输入数据来创建Series对象。
    • Series有一个标签,用于标识每个数据点,可以看作是数据的一维表示。
  2. DataFrame(最常用的数据结构,要重点了解):

    • 通用的二维带标签的表格结构,其中列的类型可能不同,大小可变。
    • 可以从字典、列表、数组等创建DataFrame。
    • DataFrame有行索引(index)和列索引(columns),可以方便地进行数据的选取、切片和聚合等操作。
    • DataFrame是Pandas的核心数据结构,非常适合存储和处理表格型数据。
  3. Panel(因结构复杂,使用少,已弃用,这里仅作扩展介绍,避免读者看到较早以前的教程时不理解):

    • 通用的三维带标签的数组,大小可变。
    • Panel可以看作是多个DataFrame的容器,用于处理三维数据。
    • 由于其复杂性,Panel在实际应用中较少使用,通常可以通过其他方式(如多层索引的DataFrame)来处理三维数据。

Series的基本操作

  1. 创建Series
import pandas as pd# 使用列表创建Series
s1 = pd.Series([1, 2, 3, 4, 5])
print(s1)# 使用NumPy数组创建Series
import numpy as np
s2 = pd.Series(np.arange(10))
print(s2)# 使用字典创建Series,字典的键将作为索引,值将作为数据
data = {'a': 1, 'b': 2, 'c': 3}
s3 = pd.Series(data)
print(s3)
  1. 访问与切片
# 访问Series中的单个元素
print(s1[0])  # 使用位置索引访问第一个元素
print(s3['a'])  # 使用标签索引访问键为'a'的元素# 切片操作
sub_s1 = s1[1:4]  # 访问第二个到第四个元素(不包含第四个)
print(sub_s1)# 使用标签切片
sub_s3 = s3['a':'c']  # 访问键从'a'到'c'的元素(包含'a'和'c')
print(sub_s3)
  1. 索引操作
# 查看Series的索引
print(s3.index)# 重新设置Series的索引
s3.index = ['x', 'y', 'z']
print(s3)
  1. 数据操作
# 对Series进行数学运算
s4 = s1 * 2  # 每个元素乘以2
print(s4)# 对Series应用函数
s5 = s1.apply(lambda x: x**2)  # 对每个元素求平方
print(s5)# 计算统计量
mean_value = s1.mean()  # 计算均值
std_dev = s1.std()  # 计算标准差
print(f"Mean: {mean_value}, Std Dev: {std_dev}")
  1. 缺失数据处理
# 创建一个包含缺失值的Series
s6 = pd.Series([1, 2, np.nan, 4, 5])
print(s6)# 填充缺失值
s6_filled = s6.fillna(0)  # 将缺失值替换为0
print(s6_filled)# 判断元素是否为缺失值
is_missing = s6.isnull()
print(is_missing)
  1. 排序
# 对Series进行排序
sorted_s3 = s3.sort_values()  # 按值升序排序
print(sorted_s3)sorted_s3_desc = s3.sort_values(ascending=False)  # 按值降序排序
print(sorted_s3_desc)
  1. 唯一值与频率统计
# 获取Series中的唯一值
unique_values = s1.unique()
print(unique_values)# 统计每个唯一值出现的频率
value_counts = s1.value_counts()
print(value_counts)

以上的例子是Series数据结构的基本操作,包括创建、访问与切片、索引操作、数据操作、缺失数据处理、排序以及唯一值与频率统计等。Series作为Pandas的基础数据结构之一,提供了丰富的API来方便地进行数据处理和分析。通过结合这些基本操作,可以有效地处理和分析一维数据。

DataFrame的基本操作

  1. 创建DataFrame
import pandas as pd# 使用字典列表创建DataFrame
data = [{'Name': 'Alice', 'Age': 25, 'City': 'New York'},{'Name': 'Bob', 'Age': 30, 'City': 'Paris'},{'Name': 'Charlie', 'Age': 35, 'City': 'London'}
]
df = pd.DataFrame(data)
print(df)# 使用二维数组或列表创建DataFrame
data_array = [[1, 'A', 100],[2, 'B', 200],[3, 'C', 300]
]
columns = ['ID', 'Letter', 'Number']
df_array = pd.DataFrame(data_array, columns=columns)
print(df_array)
  1. 访问与切片
# 访问列
names = df['Name']
print(names)# 访问多列
subset = df[['Name', 'Age']]
print(subset)# 访问行
first_row = df.iloc[0]  # 使用整数位置索引
print(first_row)# 访问特定单元格
age_bob = df.at[1, 'Age']  # 使用行标签和列名
print(age_bob)# 切片操作
subset_df = df.iloc[1:3, [0, 2]]  # 选择第二行到第三行(不包含第三行)的'Name'和'City'列
print(subset_df)
  1. 索引操作
# 查看DataFrame的索引和列名
print(df.index)
print(df.columns)# 重新设置DataFrame的索引
df.index = ['a', 'b', 'c']
print(df)# 重命名列名
df.columns = ['FullName', 'AgeYears', 'ResidentCity']
print(df)
  1. 数据操作
# 对DataFrame中的列进行数学运算
df['AgeSquared'] = df['Age'] ** 2  # 创建一个新列,值为'Age'列每个元素的平方
print(df)# 对DataFrame应用函数
df['CityUpper'] = df['City'].str.upper()  # 将'City'列中的每个元素转换为大写
print(df)# 使用applymap对DataFrame中的每个元素应用函数
df_doubled = df.applymap(lambda x: x * 2 if isinstance(x, (int, float)) else x)
print(df_doubled)# 计算每列的和、平均值等统计量
column_sums = df['Age'].sum()
column_mean = df['Age'].mean()
print(f"Sum of Age: {column_sums}, Mean of Age: {column_mean}")
  1. 数据筛选
# 使用布尔索引筛选数据
young_people = df[df['Age'] < 30]  # 选择年龄小于30的行
print(young_people)# 使用query方法筛选数据
filtered_df = df.query("Age > 28 and City == 'New York'")  # 选择年龄大于28且城市为'New York'的行
print(filtered_df)# 使用loc和iloc结合标签和位置进行筛选
filtered_df_loc = df.loc[df['City'].isin(['Paris', 'London']), ['Name', 'Age']]
print(filtered_df_loc)
  1. 缺失数据处理
# 创建一个包含缺失值的DataFrame
df_with_na = pd.DataFrame({'A': [1, 2, np.nan],'B': [5, np.nan, np.nan],'C': [1, 2, 3]
})
print(df_with_na)# 填充缺失值
df_filled = df_with_na.fillna(0)  # 将缺失值替换为0
print(df_filled)# 删除含有缺失值的行
df_dropped = df_with_na.dropna()
print(df_dropped)
  1. 排序

单列排序

​ 假设我们有一个包含员工信息的DataFrame,我们想要按照“Salary”列对员工进行升序排序:

import pandas as pd# 创建一个示例DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Salary': [50000, 60000, 45000, 55000]
}
df = pd.DataFrame(data)# 按Salary列升序排序
sorted_df_asc = df.sort_values(by='Salary')
print(sorted_df_asc)# 按Salary列降序排序
sorted_df_desc = df.sort_values(by='Salary', ascending=False)
print(sorted_df_desc)

多列排序

​ 有时我们可能希望先按照一列排序,然后在该列值相同的情况下按照另一列排序。例如,先按“Department”排序,再 按“Salary”排序:

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Department': ['HR', 'Engineering', 'Engineering', 'HR'],'Salary': [50000, 65000, 60000, 55000]
}
df = pd.DataFrame(data)# 先按Department列排序,再按Salary列升序排序
sorted_df_multi = df.sort_values(by=['Department', 'Salary'])
print(sorted_df_multi)

按照列名的字母顺序对列进行排序

​ 如果您想按照列名的字母顺序对DataFrame的列进行排序,可以使用sort_index()方法,并通过参数axis=1指定对列进行操作:

# 假设df是一个已经存在的DataFrame
sorted_columns_df = df.sort_index(axis=1)
print(sorted_columns_df)

以上例子中,sort_values()方法用于对DataFrame的行进行排序,而sort_index()方法则用于对行或列的索引进行排序。通过调整by参数和ascending参数,可以控制排序的列和排序的方向(升序或降序)。

请注意,这些排序操作不会改变原始DataFrame,而是返回一个新的排序后的DataFrame。如果希望直接修改原始DataFrame,可以使用inplace=True参数,如df.sort_values(by='Salary', inplace=True)

series和dataframe数据结构使得Pandas在处理数据时非常灵活和高效,能够轻松地进行数据的清洗、转换、聚合和分析等操作。同时,Pandas还提供了大量的函数和方法,使得数据处理和分析变得更加简单和直观,这在后面的文章中会陆续介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hugging Face 新开源Parler-TTS,高质量文本转语音模型,可自主训练定制声音,训练代码、模型、数据集全部公开

前言 Parler-TTS 是大名鼎鼎的huggingface推出的一款轻量级文本到语音&#xff08;TTS&#xff09;模型&#xff0c;它能够生成高质量、自然流畅的语音&#xff0c;并且能够模仿特定说话者的风格&#xff0c;包括性别、音高、说话风格等。这款模型是由Dan Lyth和Simon King创建…

【机器学习原理】决策树从原理到实践

基于树的模型是机器学习中非常重要的一类模型&#xff0c;最基础的就是决策树&#xff0c;本篇主要讲述决策树的原理和几类最常见的决策树算法&#xff0c;这也是更复杂的树模型算法的基础。 参考文章&#xff1a; 1.CSDN-基于熵的两个模型(ID3,C4.5)比较详细&#xff0c;有数字…

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换

什么是图像的log变换&#xff1f; 总的来说&#xff0c;对数变换是一种常用的图像增强技术&#xff0c;可以改善图像的视觉质量、减少噪声以及突出图像中的细节&#xff0c;从而提高图像在视觉感知和分析中的效果和可用性。 图像的对数变换&#xff08;log transformation&am…

【Linux命令行艺术】1. 初见命令行

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一&#xff1a;检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外&#xff0c;还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

【Linux系统编程】26.信号、kill、alarm、setitimer

目录 信号 信号共性 信号特质 产生信号 信号相关概念 默认处理动作 信号4要素 常规信号 ​编辑 注意 kill 参数pid 测试代码1 测试结果 测试代码2 测试结果 alarm 参数seconds 返回值 取消闹钟 测试代码3 测试结果1 测试结果2 ​编辑 setitimer 参数…

BIO、NIO与AIO

一 BIO 同步并阻塞(传统阻塞型)&#xff0c;服务器实现模式为一个连接一个线程&#xff0c;即客户端有连接请求时服务器端就需要启动一个线程进行处理. BIO&#xff08;Blocking I/O&#xff0c;阻塞I/O&#xff09;模式是一种网络编程中的I/O处理模式。在BIO模式中&#xf…

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽&#xff0c;大致可以分为两大类&#x…

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨&#xff0c;某知名社交软件的服务器在更新上线2小时后&#xff0c;遭遇DDoS攻击&#xff0c;导致用户无法正常登录。在紧急维护几小时后&#xff0c;这款软件才恢复正常登录的情况。 这…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快&#xff0c;人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求&#xff0c;市场上涌现出了众多桌面便签备忘录软件&#xff0c;它们不仅可以帮助我们记录待办事项&#xff0c;还能定时提醒我们完成任务。在这篇文章中&#xff0c;我将为大家…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题&#xff08;第六期&#xff09; 以下题目仅为部分题目&#xff0c;全部题目在公众号 {GISer世界} &#xff0c;答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer&#xff0c;因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到&#xff0c;所以我…

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别 普通动画&#xff1a;动画文件里记录的是物体的绝对坐标和方向&#xff0c;在播放动画时&#xff0c;Unity会根据Animation中记录的值&#xff0c;直接修改游戏对象的坐标和方向&#xff0c;每一帧的坐标和方向都是通过插值计算得出来的&…

Int4:Lucene 中的更多标量量化

作者&#xff1a;来自 Elastic Benjamin Trent, Thomas Veasey 在 Lucene 中引入 Int4 量化 在之前的博客中&#xff0c;我们全面介绍了 Lucene 中标量量化的实现。 我们还探索了两种具体的量化优化。 现在我们遇到了一个问题&#xff1a;int4 量化在 Lucene 中是如何工作的以…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力&#xff0c;这台中心计算机称为主机&#xff08;Host 或 mainframe &#xff09;&#xff0c;与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

【ARM 裸机】BSP 工程管理

回顾一下上一节&#xff1a;【ARM 裸机】NXP 官方 SDK 使用&#xff0c;我们发现工程文件夹里面各种文件非常凌乱&#xff1b; 那么为了模块化整理代码&#xff0c;使得同一个属性的文件存放在同一个目录里面&#xff0c;所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

校车车载4G视频智能监控系统方案

一、项目背景 随着社会的快速发展&#xff0c;校车安全问题日益受到人们的关注。为了提高校车运营的安全性&#xff0c;保障学生的生命安全&#xff0c;我们提出了一套校车车载4G视频智能监控系统方案。该系统能够实时监控校车内部和外部环境&#xff0c;及时发现并处理潜在的…

selenium 自动化测试课上实操指南1——百度搜索

1.环境准备 下面的所有资源可以从超星班级资料中下载&#xff0c;机房的同学在收到的文件夹中可以找到文件 非本校同学&#xff0c;免费加入学银在线课程&#xff0c;就可以在资料 根目录 > 02 课件新 > week09 web自动化测试02 里下载本次实操资料 1&#xff09;安…

【打工日常】云原生之搭建私有化web在线聊天软件LumenIM

一、LumenIM介绍 1.LumenIM简介 Lumen IM 是一个网页版在线聊天项目&#xff0c;前端使用 Naive UI Vue3&#xff0c;后端采用 GO 开发。 2.LumenIM功能 基于 WebSocket 服务做消息即时推送 支持私聊及群聊 支持多种聊天消息类型 例如:文本、代码块、图片及其它类型文件&…

15.接口自动化学习-Mock(挡板/测试桩)

场景&#xff1a; 新需求还未开发时&#xff0c;使用mock提早介入测试&#xff0c;等后边开发后&#xff0c;进行调试 三方接口返回效率低&#xff0c;使用mock技术走通流程 1.mock方式 &#xff08;1&#xff09;如果会写django或flask,可以写简单对应的代码 &#xff08;…

Mysql--基础知识点--0.1--脏读、不可重复读、幻读

1 脏读、不可重复读、幻读 1.1 脏读 如果一个事务读到了另一个事务已修改且未提交的数据&#xff0c;则发生了脏读现象。 1.2 不可重复读 在一个事务里面多次读取同一个数据&#xff0c;若前后两次读到的数据不一致&#xff0c;则发生不可重复读现象。 1.3 幻读 在一个…