「pandas」python pandas 初步、数据结构Series、DataFrame、MultiIndex

news/2025/2/1 8:35:03/

pandaspython_pandas_SeriesDataFrameMultiIndex_0">「pandaspython pandas 初步、数据结构Series、DataFrame、MultiIndex


更多内容请关注本人【pandas】专栏


【目录】

pandas_25">一、pandas简介

以numpy为基础、借力numpy模块在计算性能高的优势

基于matplotlib,能够简便画图了解结果

独特的数据结构:Series、DataFrame、MultiIndex

pandas_33">二、为什么使用pandas
  • pandas能对数据进行处理,包括但不限于数据清洗、数据缺失值处理等
  • 增强数据可读性——图表
  • 便捷的数据处理能力——数据分析和处理
  • 读取文件方便——CSV、HDF5、Excel
  • 封装了matplotlib、numpy的画图和计算
pandas_41">三、pandas数据结构

Series 一维数据结构、 DataFrame 二维数据结构、 MultiIndex 三维数据结构

  • head(n)、tail(n)查看数据,默认n=5
四、Series

Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。

在这里插入图片描述

4.1 Series创建
  • pd.Series(data=None, Index=None, dtype=None)
    • data:传入的数据,可以是ndarray、list等
    • index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N-1的整数索引。
    • dtype:数据的类型

4.1.1 默认索引创建Series
python">import pandas as pd
import numpy as nps1 = pd.Series(np.range(10))
print(s1)# 运行结果
0    0
1    1
2    2
3    3
4    4
5    5
dtype: int64
4.1.2 指定索引创建
python">s2 = pd.Series([12, 45, 33, 50, 66], index=['a', 'b', 'c', 'd', 'e'])
print(s2)# 运行结果
a    12
b    45
c    33
d    50
e    66
dtype: int64
4.1.3 通过字典数据创建
python">s3 = pd.Series({"age": 18, "name": "小明", "height": 180, "weight": 220})
print(s3)# 运行结果
age        18
name       小明
height    180
weight    220
dtype: objec

4.2 Series属性:index和values
  • index
python">s3 = pd.Series({"age": 18, "name": "小明", "height": 180, "weight": 220})
print(s3.index)# 运行结果
Index(['age', 'name', 'height', 'weight'], dtype='object')
  • values
python">s3 = pd.Series({"age": 18, "name": "小明", "height": 180, "weight": 220})
print(s3.values)# 运行结果
[18 '小明' 180 220]
4.3 Series索引获取数据:loc和iloc
  • loc
  • 在index上索引
  • 选择index的标签数据上进行索引(即是在index上寻找相应的标签,不是下标),范围包括start和end。
python">s3 = pd.Series({"age": 18, "name": "小明", "height": 180, "weight": 220})
print(x.loc["age"])# 运行结果
18
  • iloc
  • 在index的位置上进行索引(即是按照普通的下标寻找),不包括end
python">s3 = pd.Series({"age": 18, "name": "小明", "height": 180, "weight": 220})
print(x.iloc[1])# 运行结果
小明

五、DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

行索引,表明不同行,横向索引,叫index,0轴,axis=0

列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

在这里插入图片描述


5.1 DataFrame创建
  • pd.DataFrame(data=None, index=None, columns=None)
    • index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
    • columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
5.1.1 默认格式创建
python">d = pd.DataFrame(np.random.randint(0, 10, (2, 3)))
print(d)# 运行结果:第1行和第1列是默认索引值0  1  2
0  1  3  4
1  4  6  7
5.1.2 二维矩阵传入创建

需求:学生成绩表格的格式

python">score = np.random.randint(40, 100, (3, 5))
print(score)# 运行结果
[[42 95 44 57 63][95 67 61 41 79][69 57 83 75 46]]# 创建DataFrame
score_d = pd.DataFrame(score)
print(score_d)# 运行结果0   1   2   3   4
0  42  95  44  57  63
1  95  67  61  41  79
2  69  57  83  75  46
5.1.3 增加行列索引值
python"># 行索引
subjects = ["语文", "数学", "英语", "政治", "体育"]# 列索引
stu = ['学生_' + str(i) for i in range(score_d.shape[0])]# 添加索引
score_d = pd.DataFrame(score, columns=subjects, index=stu)
print(score_d)# 运行结果语文  数学  英语  政治  体育
学生_0  42  95  44  57  63
学生_1  95  67  61  41  79
学生_2  69  57  83  75  46
  • 小插曲,设置option将输出格式对齐
python">pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
python">        语文  数学  英语  政治  体育
学生_0    57    43    77    94    62
学生_1    99    49    89    51    70
学生_2    99    92    86    52    50

5.2 DataFrame属性:shape、index、columns、values、转置T
  • shape
python">print(score_d.shape)# 运行结果
(3, 5)
  • index
python">print(score_d.index)# 运行结果
Index(['学生_0', '学生_1', '学生_2'], dtype='object')
  • columns
python">print(score_d.columns)# 运行结果
Index(['语文', '数学', '英语', '政治', '体育'], dtype='object')
  • values
python">print(score_d.values)# 运行结果
[[59 92 41 61 85][40 60 62 78 51][84 86 44 88 47]]
  • 转置T
python">print(score_d.T)# 运行结果学生_0  学生_1  学生_2
语文      59      40      84
数学      92      60      86
英语      41      62      44
政治      61      78      88
体育      85      51      47

5.3 DataFrame索引设置
5.3.1 修改行列索引值
  • 必须整体全部修改
  • 不可以单个修改
python">stu = [f"同学_{i + 1}" for i in range(score_d.shape[0])]# 必须整体全部修改
score_d.index = stuprint(score_d.index)
# 运行结果
Index(['同学_1', '同学_2', '同学_3'], dtype='object')# 注意,下面的修改方式是错误的
# score_d.index[1] = '小明'
5.3.2 重设索引
  • reset_index(drop=False, inplace=False)
    • 设置新的下标索引
    • drop: 默认为False,不删除原来索引,如果为True,删除原来的索引值
    • inplace: 默认为False,是否返回新的DataFrame还是在原来的数据结构上修改
python">x = score_d.reset_index(inplace=True)	# 由于inplace=True,则x为Noneprint(score_d)
# 运行结果index  语文  数学  英语  政治  体育
0  同学_1    65    84    74    66    84
1  同学_2    82    77    83    53    68
2  同学_3    80    63    51    94    90
5.3.3 以某列值设置为新的索引
  • set_index(keys, drop=True)
    • keys : 列索引名成或者列索引名称的列表
    • drop : boolean, default True.当做新的索引,删除原来的列
python">df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2018, 2020, 2022, 2024],'day': [5, 13, 2, 1]})df.set_index('month', inplace=True)	# 使用month作为索引
# df.set_index(['month', 'year'], inplace=True)	# 多个索引,也就是MultiIndex
print(df)# 运行结果year  day
month           
1      2018    5
4      2020   13
7      2022    2
10     2024    1
六、MultiIndex

多级索引(层级化索引)是pandas中一个重要的特性,能让我们在一个轴(axis)上有多个index levels(索引层级)。它可以让我们在低维格式下处理高维数据。

MultiIndex是三维数据结构

python">import pandas as pd
import numpy as nppd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)score = np.random.randint(100, size=(6, 3))
df = pd.DataFrame(score, index=[["学生1", "学生1", "学生2", "学生2", "学生3", "学生3"],["期末", "期中", "期末", "期中", "期末", "期中"]],columns=["语文", "英语", "数学"])print(df)# 运行结果语文  英语  数学
学生1 期末     0    57    67期中    42    12    20
学生2 期末    34    10    40期中    31    19    39
学生3 期末     4    57    35期中    51    22    83
6.1 pd.MultiIndex创建索引
python">score = np.random.randint(100, size=(6, 3))
names = ["同学1", "同学2", "同学3"]
period = ["期中", "期末"]
columns = ["语文", "英语", "数学"]
index = pd.MultiIndex.from_product([names, period])	# 创建索引,第一层,第二层,...
df = pd.DataFrame(score, index=index, columns=columns)print(df)

http://www.ppmy.cn/news/1568381.html

相关文章

JRE、JVM 和 JDK 的区别

Java 的运行和开发环境中,有三个重要的概念:JRE、JVM 和 JDK。 1. JVM (Java Virtual Machine) 定义:Java 虚拟机,是运行 Java 程序的虚拟环境。作用: 执行 .class 字节码文件。提供内存管理、垃圾回收和安全机制。不…

Rust 条件语句

Rust 条件语句 在编程语言中,条件语句是进行决策和实现分支逻辑的关键。Rust 语言作为一门系统编程语言,其条件语句的使用同样至关重要。本文将详细介绍 Rust 中的条件语句,包括其基本用法、常见场景以及如何避免常见错误。 基本用法 Rust…

记录一个连不上docker中的mysql的问题

引言 使用的debian12,不同发行版可能有些许差异,连接使用的工具是navicat lite 本来是毫无思绪的,以前在云服务器上可能是防火墙的问题,但是这个桌面环境我压根没有使用防火墙。 直到 ying192:~$ mysql -h127.0.0.1 -uroot ERROR 1045 (28…

【2024年华为OD机试】(A卷,200分)- 农场施肥 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 某农场主管理了一大片果园,fields[i] 表示不同果林的面积,单位:平方米(m)。现在需要为所有的果林施肥,且必须在 n 天之内完成,否则会影响收成。小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完后当天不再进行施肥作业。 …

大模型高频知识汇总:查漏补缺参考大全

大模型技术深度剖析与面试指南 在人工智能领域蓬勃发展的当下,大模型技术成为了核心驱动力,相关岗位的面试也对求职者提出了极高的要求。本文将围绕大模型的关键技术领域展开,深入探讨其中的原理、应用及面试要点,助力读者查漏补…

Langchain+文心一言调用

import osfrom langchain_community.llms import QianfanLLMEndpointos.environ["QIANFAN_AK"] "" os.environ["QIANFAN_SK"] ""llm_wenxin QianfanLLMEndpoint()res llm_wenxin.invoke("中国国庆日是哪一天?") print(…

LeetCode 0541.反转字符串 II:模拟

【LetMeFly】541.反转字符串 II:模拟 力扣题目链接:https://leetcode.cn/problems/reverse-string-ii/ 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如…

【项目集成Husky】

项目集成Husky 安装初始化 Husky在.husky → pre-commit文件中添加想要执行的命令 安装 使用 Husky 可以帮助你在 Git 钩子中运行脚本,例如在提交代码前运行测试或格式化代码pnpm add --save-dev husky初始化 Husky npx husky init这会在项目根目录下创建一个 .hu…