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

news2024/11/18 7:24:58

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.coloradmin.cn/o/1629883.html

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

相关文章

python在pyqt5+logging+threading模块实时显示日志

pyqt5logging模块&#xff0c;在界面上实时显示日志 简介代码实现logging.Handler重写界面创建与日志实时打印执行main.py 简介 在写小工具时&#xff0c;使用pyqt5生成界面&#xff0c;在代码中使用logging模块来打印信息&#xff0c;现在希望能将logging打印的信息实时展示在…

Android 开发工具使用

c调试 在NDK调试的时候&#xff0c;如果找不到 符号的话&#xff0c;我们可以在调试配置中添加符号地址的全路径一直到根目录&#xff1a;&#xff0c;xxx/armeabi-v7a&#xff1a; You must point the symbol search paths at the obj/local/ directory. This is also not a …

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

windows pytorch安装

安装环境 WindowsAnacondaCudacuDNN Linux和Windows操作系统的安装存在差异&#xff0c;步骤会有所不同&#xff0c;本教程主要针对Windows系统进行示例。 Anaconda集成了许多方便的包和工具&#xff0c;使用会更加方便&#xff0c;特别适合科学计算&#xff0c;深度学习的数…

基于MATLAB野外观测站生态气象数据处理分析

朱老师(副教授)&#xff1a;来自国内重点高校&#xff0c;长期从事野外观测站生态气象监测与评估研究&#xff0c;发表SCl论文多篇&#xff0c;主持国家与地方科研项目多个,在生态环境数据处理与分析中具有丰富的实践项目经验。 以野外观测站高频时序生态气象数据为例&#xff…

ssm项目后端如何导出war及前端如何导出静态资源

后端如何导出war包 后端工具&#xff1a;IDEA 2020.1.3 运行我们编写工具maven里面的package 运行成功的日志 我们运行完&#xff0c;会生成一个target文件夹&#xff0c;在这个文件夹里面找到war包即可 前端如何导出静态资源 使用工具&#xff1a;WebStorm 2020.1.3 打开左…

c++的学习之路:28、哈希表

摘要 本章主要是说一下哈希的实现 目录 摘要 一、哈希表 1、哈希概念 2、闭散列 1、节点创建 2、插入 3、查找 4、删除 5、测试 3、开散列 1、创建 2、插入 3、查找 4、删除 5、析构函数 二、map 三、set 四、位图与布隆过滤器 五、代码 test.cpp HashT…

[移动端] “viewport“ content=“width=device-width, initial-scale=1.0“ 什么意思

布局视口, 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body,html {margin: 0;padding: 0;}.box {width: 200px;height: 200px;background-color: pi…

第五十周:文献阅读+IGRA-ISSA-LSTM

目录 摘要 Abstract 文献阅读&#xff1a;基于IGRA-ISSA-LSTM模型的水质预测 现有问题 提出方法 方法论 灰色关联分析&#xff08;GRA) 改进的灰色关联分析&#xff08;IGRA&#xff09; 麻雀搜索算法&#xff08;SSA&#xff09; 改进的麻雀搜索算法&#xff08;ISS…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

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

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

JAVA SWING JTABLE表格,点击表头数据可以排序,且第一二行位置固定,不参与排序

对于JAVA SWING 界面开发&#xff0c;使用表格JTABLE开发过程中&#xff0c;一些情况下可能需要在点击表头时对数据进行排序处理。对于简单的排序处理&#xff0c;jtable的setAutoCreateRowSorter方法可满足&#xff0c;但是对于高要求的排序&#xff0c;则满足不了。 比如&am…

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

base64练习

找到password 搜索台搜索password 找到关于password关于base64算法的代码打上断点 点到这个位置在会有一个地址弹出来点击进去 缩小复制 粘贴 运行出数据&#xff0c;成功完成分析

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

新版运营级限速网盘系统源码 带教程

支持用户使用微信扫码登录&#xff0c;上传文件分享链接可自定义&#xff0c;文件可一键保存到我的网盘&#xff0c;支持微信跟支付宝官方接口&#xff0c;易支付接口不强制可自定义&#xff0c;系统整体的架构安全度升级。学习地址

GraspNet-1Billion 论文阅读

文章目录 GraspNet-1Billion总体数据集评价指标网络pointnet&#xff1a;Approach Network:Operation Network&#xff1a;Tolerance Network 摘要相关工作基于深度学习的抓取预测算法抓取数据集点云深度学习 GraspNet-1Billion CVPR2020 上海交大 论文和数据集地址&#xff1…

Python爬虫--Scrapy框架安装

Scrapy框架安装 &#xff0c; Scrapy 是 Python 领域专业的爬虫开发框架&#xff0c;已经完成爬虫程序的大部分通用工具 它使用了 Twisted 异步网络库来处理网络通讯。整体架构大致如下 第一步&#xff1a;挂小灰机或者将要安装的文件下载到本地 Scrapy 框架安装踩坑中 为什…

【delphi 】常用资源网站

在Delphi的日常开发中&#xff0c;经常会用到第三方资源&#xff0c;本文收集的是开源的资源&#xff0c;建议收藏&#xff0c;以备不时之需&#xff01; 目录 一、通用资源 1. JCL 2. JVCL 3. Alcinoe (mirror at GH) 4. Fundamentals Code Library 5. Spring4D 6. The…