Python酷库之旅-第三方库Pandas(017)

news2024/9/24 21:26:42

目录

一、用法精讲

41、pandas.melt函数

41-1、语法

41-2、参数

41-3、功能

41-4、返回值

41-5、说明

41-5-1、宽格式数据(Wide Format)

41-5-2、长格式数据(Long Format)

41-6、用法

41-6-1、数据准备

41-6-2、代码示例

41-6-3、结果输出

42、pandas.pivot函数

42-1、语法

42-2、参数

42-3、功能

42-4、返回值

42-5、说明

42-6、用法

42-6-1、数据准备

42-6-2、代码示例

42-6-3、结果输出 

43、pandas.pivot_table函数

43-1、语法

43-2、参数

43-3、功能

43-4、返回值

43-5、说明

43-6、用法

43-6-1、数据准备

43-6-2、代码示例

43-6-3、结果输出

二、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、用法精讲

41、pandas.melt函数
41-1、语法
# 41、pandas.melt函数
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)
Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.

This function is useful to massage a DataFrame into a format where one or more columns are identifier variables (id_vars), while all other columns, considered measured variables (value_vars), are “unpivoted” to the row axis, leaving just two non-identifier columns, ‘variable’ and ‘value’.

Parameters:
id_vars
scalar, tuple, list, or ndarray, optional
Column(s) to use as identifier variables.

value_vars
scalar, tuple, list, or ndarray, optional
Column(s) to unpivot. If not specified, uses all columns that are not set as id_vars.

var_name
scalar, default None
Name to use for the ‘variable’ column. If None it uses frame.columns.name or ‘variable’.

value_name
scalar, default ‘value’
Name to use for the ‘value’ column, can’t be an existing column label.

col_level
scalar, optional
If columns are a MultiIndex then use this level to melt.

ignore_index
bool, default True
If True, original index is ignored. If False, the original index is retained. Index labels will be repeated as necessary.

Returns:
DataFrame
Unpivoted DataFrame.
41-2、参数

41-2-1、frame(必须)要转换的DataFrame。

41-2-2、id_vars(可选,默认值为None)在熔化过程中用作标识符变量的列名列表,这些列将保持在结果DataFrame中,不会“熔化”成行,如果不提供,则假定没有标识符变量,所有列都将被熔化。

41-2-3、value_vars(可选,默认值为None)要熔化成行变量的列名列表,如果未指定,则除了id_vars之外的所有列都将被熔化。

41-2-4、var_name(可选,默认值为None)在熔化后的DataFrame中,用于存储原列名(即value_vars中的列名)的列名,如果未指定,则默认为'variable'。

41-2-5、value_name(可选,默认值为'value')在熔化后的DataFrame中,用于存储原列值的列名。

41-2-6、col_level(可选,默认值为None)如果列是多级索引(MultiIndex),则此参数用于选择将被熔化的级别,可以是级别编号、级别名称或级别名称的元组/列表。

41-2-7、ignore_index(可选,默认值为True)是否在熔化后重置索引,如果为True,则忽略原始索引,并在熔化后创建一个新的整数索引。

41-3、功能

        用于将DataFrame中的宽格式数据(即具有多个变量列的数据)转换为长格式(或称为“熔化”格式),这在进行数据可视化准备数据以进行某些类型的分析时非常有用。

41-4、返回值

        返回一个新的DataFrame,该DataFrame包含了熔化后的数据。

41-5、说明

        宽格式数据和长格式数据是数据处理中常见的两种数据格式,它们在数据结构和呈现方式上有所不同,适用于不同的分析需求。

41-5-1、宽格式数据(Wide Format)

41-5-1-1、定义
        宽格式数据是指数据集对所有的变量进行了明确的细分,每个变量都占有一列,每个观察值占有一行,这种格式下,数据总体的表现为变量多而观察值少,每一行数据为一条完整的记录,记录着某个实体(如个体、时间点等)的各种属性或变量。

41-5-1-2、特点

41-5-1-2-1、变量多而观察值少:每个变量都作为一列存在,每行数据包含该实体所有变量的值。
41-5-1-2-2、易于理解:对于人类阅读者来说,宽格式数据通常更直观易懂,因为每行都是一个实体的完整信息。
41-5-1-2-3、适用于某些分析:在需要同时查看多个变量值的情况下,宽格式数据更为方便。

41-5-1-3、示例        

        假设有一份学生信息表,包括学生的姓名、年龄、性别、成绩等字段,每行代表一个学生的信息,那么这份数据就是宽格式数据。

41-5-2、长格式数据(Long Format)

41-5-2-1、定义

        长格式数据一般是指数据集中的变量没有做明确的细分,即变量中至少有一个变量中的元素存在值严重重复循环的情况(可以归为几类),表格整体的形状为长方形,即变量少而观察值多,在这种格式下,每一行数据记录的是某个实体(如个体、时间点等)的一个属性或变量的值,形式通常为“key:value”对。

41-5-2-2、特点

41-5-2-2-1、变量少而观察值多:数据通过更多的行来表示,每行只包含一个变量(或属性)的值,以及一个或多个用于标识实体的标识符(如ID)。
41-5-2-2-2、便于数据分析:在需要进行统计分析、数据可视化或建模时,长格式数据通常更为灵活和方便。
41-5-2-2-3、需要转换:在某些情况下,为了进行特定的分析或可视化,可能需要将宽格式数据转换为长格式数据。

41-5-2-3、示例

        如果上述学生信息表被转换为长格式,那么可能会有多行数据来分别表示每个学生的姓名、年龄、性别和成绩等信息,每行都会包含一个标识符(如学生ID)来区分不同的学生。

        总之,宽格式数据和长格式数据各有优缺点,适用于不同的场景和需求。在处理数据时,应根据具体的分析目标和工具选择合适的数据格式;同时,了解如何在不同格式之间进行转换也是数据处理和分析的重要技能之一。

41-6、用法
41-6-1、数据准备
41-6-2、代码示例
# 41、pandas.melt函数
import pandas as pd
df = pd.DataFrame({
    'A': ['foo', 'bar', 'baz'],
    'B': [1, 2, 3],
    'C': [4, 5, 6]
})
print(df, end='\n\n')
melted_df = pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
print(melted_df)
41-6-3、结果输出
# 41、pandas.melt函数
#      A  B  C
# 0  foo  1  4
# 1  bar  2  5
# 2  baz  3  6
# 
#      A variable  value
# 0  foo        B      1
# 1  bar        B      2
# 2  baz        B      3
# 3  foo        C      4
# 4  bar        C      5
# 5  baz        C      6
42、pandas.pivot函数
42-1、语法
# 42、pandas.pivot函数
pandas.pivot(data, *, columns, index=_NoDefault.no_default, values=_NoDefault.no_default)
Return reshaped DataFrame organized by given index / column values.

Reshape data (produce a “pivot” table) based on column values. Uses unique values from specified index / columns to form axes of the resulting DataFrame. This function does not support data aggregation, multiple values will result in a MultiIndex in the columns. See the User Guide for more on reshaping.

Parameters:
data
DataFrame
columns
str or object or a list of str
Column to use to make new frame’s columns.

index
str or object or a list of str, optional
Column to use to make new frame’s index. If not given, uses existing index.

values
str, object or a list of the previous, optional
Column(s) to use for populating new frame’s values. If not specified, all remaining columns will be used and the result will have hierarchically indexed columns.

Returns:
DataFrame
Returns reshaped DataFrame.

Raises:
ValueError:
When there are any index, columns combinations with multiple values. DataFrame.pivot_table when you need to aggregate.
42-2、参数

42-2-1、data(必须)DataFrame或Series对象,这是你想要重塑的原始数据。

42-2-2、columns(必须)用于新DataFrame的列索引的列名或列名列表,这个参数指定了原始DataFrame中哪些列的值将被用作新DataFrame的列标题。

42-2-3、index(必须)用于新DataFrame的行索引的列名或列名列表,如果未指定,则使用原始 DataFrame 的索引,这个参数是必需的(虽然在函数签名中标记为可选,但实际上不指定会导致错误),但函数签名中的_NoDefault.no_default是一种内部机制,用于在函数定义时表明这个参数不应该有默认值,必须显式提供。

42-2-4、values(可选)指定哪些列的值应该被填充到新DataFrame的单元格中,如果未指定,则所有剩余列的值都会被填充进去,但这样可能会导致结果DataFrame的列具有多层索引(MultiIndex),因为每个剩余列都会成为一层。

42-3、功能

        似于Excel中的数据透视表功能,它允许用户根据指定的行索引(index)和列索引(columns)来重塑DataFrame,并将选定的值(values)填充到新的DataFrame中。

42-4、返回值

        返回一个新的DataFrame对象,该对象根据指定的行索引、列索引和值进行了重塑。返回的DataFrame的行由index参数指定的列的值确定,列由columns参数指定的列的值确定,而单元格的值则由values参数指定的列的值填充。

42-5、说明

42-5-1、如果在指定的index和columns下存在重复的values,pivot函数将抛出错误,因为它无法确定如何将这些重复的值分配到新的DataFrame中。

42-5-2、pivot函数不支持直接的数据聚合运算,但它可以通过重新排列数据来为后续的聚合运算(如使用groupby和agg函数)提供便利。

42-5-3、在使用pivot函数时,必须确保index和columns参数指定的列中的值能够唯一地确定每个单元格的位置,否则将无法生成有效的DataFrame。

42-6、用法
42-6-1、数据准备
42-6-2、代码示例
# 42、pandas.pivot函数
import pandas as pd
# 创建一个包含销售数据的字典
data = {
    'year': [2023, 2023, 2024, 2024],
    'product': ['A', 'B', 'A', 'B'],
    'sales': [100, 200, 150, 250]
}
# 将字典转换为DataFrame
df = pd.DataFrame(data)
print(df, end='\n\n')

# 使用pivot重塑DataFrame
# 指定'year'为行索引,'product'为列索引,'sales'为要填充的值
pivoted = pd.pivot(df, index='year', columns='product', values='sales')
# 打印重塑后的DataFrame
print(pivoted)
42-6-3、结果输出 
# 42、pandas.pivot函数
#    year product  sales
# 0  2023       A    100
# 1  2023       B    200
# 2  2024       A    150
# 3  2024       B    250

# product    A    B
# year             
# 2023     100  200
# 2024     150  250
43、pandas.pivot_table函数
43-1、语法
# 43、pandas.pivot_table函数
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=_NoDefault.no_default, sort=True)
Create a spreadsheet-style pivot table as a DataFrame.

The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame.

Parameters:
dataDataFrame
valueslist-like or scalar, optional
Column or columns to aggregate.

indexcolumn, Grouper, array, or list of the previous
Keys to group by on the pivot table index. If a list is passed, it can contain any of the other types (except list). If an array is passed, it must be the same length as the data and will be used in the same manner as column values.

columnscolumn, Grouper, array, or list of the previous
Keys to group by on the pivot table column. If a list is passed, it can contain any of the other types (except list). If an array is passed, it must be the same length as the data and will be used in the same manner as column values.

aggfuncfunction, list of functions, dict, default “mean”
If a list of functions is passed, the resulting pivot table will have hierarchical columns whose top level are the function names (inferred from the function objects themselves). If a dict is passed, the key is column to aggregate and the value is function or list of functions. If margin=True, aggfunc will be used to calculate the partial aggregates.

fill_valuescalar, default None
Value to replace missing values with (in the resulting pivot table, after aggregation).

marginsbool, default False
If margins=True, special All columns and rows will be added with partial group aggregates across the categories on the rows and columns.

dropnabool, default True
Do not include columns whose entries are all NaN. If True, rows with a NaN value in any column will be omitted before computing margins.

margins_namestr, default ‘All’
Name of the row / column that will contain the totals when margins is True.

observedbool, default False
This only applies if any of the groupers are Categoricals. If True: only show observed values for categorical groupers. If False: show all values for categorical groupers.

Deprecated since version 2.2.0: The default value of False is deprecated and will change to True in a future version of pandas.

sortbool, default True
Specifies if the result should be sorted.

New in version 1.3.0.

Returns:
DataFrame
An Excel style pivot table.
43-2、参数

43-2-1、data(必须)必须是DataFrame类型,表示你要从中创建透视表的数据。

43-2-2、values(可选,默认值为None)指定需要聚合的列,默认情况下,所有数值列都将被聚合,如果你只关心某个或某些列,可以在这里指定它们。

43-2-3、index(可选,默认值为None)用于分组的列名列表或列名,结果DataFrame将使用这些列的值作为行索引。

43-2-4、columns(可选,默认值为None)用于分组的另一个列名列表或列名,如果指定了此参数,则这些列的值将用作结果DataFrame的列标题。

43-2-5、aggfunc(可选,默认值为'mean')一个函数或函数列表,用于聚合数据,默认是'mean',即计算平均值。你可以使用如sum、max、min、std(标准差)、first、last等内置函数,或者自定义函数。

43-2-6、fill_value(可选,默认值为None)用于替换结果DataFrame中缺失值的值,默认为None,即不填充缺失值。

43-2-7、margins(可选,默认值为False)布尔值,默认为False,如果为True,则会在结果DataFrame的末尾添加一个全行/全列,包含所有值的聚合(基于aggfunc)。

43-2-8、dropna(可选,默认值为True)布尔值,如果为False,则不会从结果中删除包含缺失值的行。注意,如果index或columns中包含缺失值,并且dropna=True,则这些缺失值会被忽略(即不会出现在结果DataFrame的索引或列标题中)。

43-2-9、margins_name(可选,默认值为'All')字符串,当margins=True时,用于命名全行/全列的标签。

43-2-10、observed(可选)pandas 1.1.0版本中引入的参数,用于控制如何处理未在数据中观察到的组合。如果为True(默认值在1.1.0之前的版本中是None,但在1.1.0及更高版本中变为True),则只包括在数据集中实际观察到的组合;如果为False,则会包括所有可能的组合,即使某些组合在数据中没有出现。

43-2-11、sort(可选,默认值为True)布尔值,如果为True,则结果DataFrame的行和列(如果指定了多个列作为索引/列)将按字典顺序排序;如果为False,则不进行排序。

43-3、功能

       根据一个或多个键(通常是DataFrame中的列)对数据进行分组,并对每个分组应用聚合函数,以创建一个新的DataFrame,这个新的DataFrame以不同的方式组织和汇总了原始数据,便于进行更深入的数据分析和可视化。

43-4、返回值

        返回值是一个新的DataFrame,它根据提供的参数对原始数据进行了重塑和汇总。这个新的DataFrame的行索引由index参数决定,列标题(如果指定了columns参数)也由该参数决定,而单元格中的值则是根据aggfunc参数指定的聚合函数计算得到的。

43-5、说明

        如果margins设置为True,则返回的DataFrame还会包含一个额外的全行或全列(取决于margins_name参数的值,默认为'All'),该行/列包含了所有行的聚合统计量。

43-6、用法
43-6-1、数据准备
43-6-2、代码示例
# 43、pandas.pivot_table函数
import pandas as pd
import numpy as np
# 创建一个示例数据集
data = {
    'Date': pd.date_range('2023-01-01', periods=6, freq='D'),
    'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles', 'New York', 'Los Angeles'],
    'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
    'Values': [100, 200, 150, 250, np.nan, 300]
}
df = pd.DataFrame(data)
print("原始数据集:")
print(df)
# 使用pivot_table重塑DataFrame
pivot_table = pd.pivot_table(
    data=df,
    values='Values',
    index=['Date', 'City'],
    columns='Category',
    aggfunc='mean',
    fill_value=0,
    margins=True,
    margins_name='All',
    dropna=True,
    sort=True
)
print("\npivot_table结果:")
print(pivot_table)
43-6-3、结果输出
# 43、pandas.pivot_table函数
# 原始数据集:
#         Date         City Category  Values
# 0 2023-01-01     New York        A   100.0
# 1 2023-01-02  Los Angeles        A   200.0
# 2 2023-01-03     New York        B   150.0
# 3 2023-01-04  Los Angeles        B   250.0
# 4 2023-01-05     New York        A     NaN
# 5 2023-01-06  Los Angeles        B   300.0

# pivot_table结果:
# Category                             A           B    All
# Date                City
# 2023-01-01 00:00:00 New York     100.0    0.000000  100.0
# 2023-01-02 00:00:00 Los Angeles  200.0    0.000000  200.0
# 2023-01-03 00:00:00 New York       0.0  150.000000  150.0
# 2023-01-04 00:00:00 Los Angeles    0.0  250.000000  250.0
# 2023-01-06 00:00:00 Los Angeles    0.0  300.000000  300.0
# All                              150.0  233.333333  200.0

二、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页

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

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

相关文章

.net C# 使用网易163邮箱搭建smtp服务,实现发送邮件功能

功能描述:使用邮箱验证实现用户注册激活和找回密码。邮箱选择网易163作为smtp服务器。 真实测试情况:第一种:大部分服务器运行商的25端口默认是封禁的,可以联系运营商进行25端口解封,解封之后可以使用25端口。第二种&…

电力需求预测挑战赛笔记 Taks1 跑通baseline

#AI夏令营 #Datawhale #夏令营 赛题 一句话介绍赛题任务可以这样理解赛题: 【训练时序预测模型助力电力需求预测】 电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。 赛题任务 给定多个房屋对应电力消耗历史 N 天的相关序列数…

Comparable 和 Comparator 接口的区别

Comparable 和 Comparator 接口的区别 1、Comparable 接口1.1 compareTo() 方法 2、Comparator 接口2.1 compare() 方法 3、 Comparable 和 Comparator 的区别总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,Compa…

网络钓鱼中的高级同形异义:网络安全的新威胁

网络安全正面临一个潜在的新威胁:在网络钓鱼攻击中使用同形异义词。 这篇调查文章探讨了同形异义现象如何在各种类型的网络钓鱼攻击中使用、其背后的技术。 对这种恶意行为的研究以及高级语言模型 (LLM) 如何帮助加速同形异形现象的研究。 什么是同形异义&#xf…

SpringCloud--Eureka集群

Eureka注册中心集群 为什么要集群 如果只有一个注册中心服务器,会存在单点故障,不可以高并发处理所以要集群。 如何集群 准备三个EurekaServer 相互注册,也就是说每个EurekaServer都需要向所有的EureakServer注册,包括自己 &a…

感应触摸芯片集成为MCU,深度应用触控按键技术的VR眼镜

VR(Virtual Reality)即虚拟现实,简称VR,其具体内涵是综合利用计算机图形系统和各种现实及控制等接口设备,在计算机上生成的、可交互的三维环境中提供沉浸感觉的技术。它的工作原理是将左右眼图像交互显示在屏幕上的方式…

40个高阶ChatGPT学术论文指令集(附GPT使用链接)

我精心挑选的40个顶尖ChatGPT学术论文指令集,无疑将成为你撰写论文和开展研究的珍贵资源,极力推荐你珍藏起来!这些建议极具实用价值,能有效提高你的研究工作效率,使得论文撰写过程轻松许多。 在开始前,提示…

在 Java 中进行类似于 Python 的系统调用

1、问题背景 Python 中有一个内置函数 popen2,可以用来执行系统命令并获取其输出和状态信息。在 Java 中,是否有与之类似的函数或类,可以实现同样的功能? 2、解决方案 方法一:使用 Process 对象 Java 中可以使用 P…

STM32智能物流机器人系统教程

目录 引言环境准备智能物流机器人系统基础代码实现:实现智能物流机器人系统 4.1 数据采集模块 4.2 数据处理与导航算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:物流机器人管理与优化问题解决方案与优化收尾与总结 1. 引言 智能物流…

ESP32CAM物联网教学11

ESP32CAM物联网教学11 霍霍webserver 在第八课的时候,小智把乐鑫公司提供的官方示例程序CameraWebServer改成了明码,这样说明这个官方程序也是可以更改的嘛。这个官方程序有四个文件,一共3500行代码,看着都头晕,小智决…

第100+15步 ChatGPT学习:R实现Ababoost分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言,不想学Python咯。 答曰:可!用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了,就帮各位搬运一下吧。 二、R代码实现Ababoost分类 &#xff…

打造热销爆款:LazadaShopee店铺测评与关键词策略

面对Lazada和Shopee平台上店铺销量难以突破的困境,卖家们往往寻求各种解决方案。其中,店铺测评作为提升店铺信誉、优化产品排名及增加曝光度的有效手段,正逐渐成为卖家关注的焦点。以下将深入探讨店铺测评的好处、实施技巧及自养号的关键要素…

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候,利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task,mode为model为自己需要的内容后, 执行以下语句 cd …

2024最新修复微信公众号无限回调系统源码下载 免授权开心版

2024最新修复微信公众号无限回调系统源码下载 免授权开心版 微信公众平台回调比较麻烦,还不能多次回调,于是搭建一个多域名回调的源码很有必要。 测试环境:Nginx1.24PHP7.2MySQL5.6 图片:

5G与未来通信技术

随着科技的迅猛发展,通信技术也在不断演进。5G技术作为第五代移动通信技术,已成为现代通信技术的一个重要里程碑。本文将详细介绍5G及其对未来通信技术的影响,重点探讨超高速互联网和边缘网络的应用。 一、超高速互联网 1. 低延迟 5G技术最显…

一个vue页面复用方案

前言 问大家一个问题,曾经的你是否也遇到过,一个项目中有好几个页面长得基本相同,但又差那么一点,想用 vue extends 继承它又不能按需继承html模板部分,恰好 B 页面需要用的 A 页面 80% 的模板,剩下的 20%…

在Anaconda环境中安装TensorFlow+启动jupyter notebook

1.打开cmd,输入C:\Users\xy>conda create -n tensorflow python3.7 这是在环境中创建了一个名为tensorflow的环境,具体会显示以下信息: C:\Users\xy>conda create -n tensorflow python3.7 Retrieving notices: ...working... done Co…

等保从哪些方面进行测评

等保,全名叫做信息安全等级保护,顾名思义就是指根据信息系统在国家安全、社会稳定、经济秩序和公共利益方便的中重要程度以及风险威胁、安全需求、安全成本等因素,将其划分不同的安全保护等级并采取相应等级的安全保护技术、管理措施、以保障…

Python面试宝典第11题:最长连续序列

题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出:…

前端JS特效第30集:jQuery焦点图插件edslider

jQuery焦点图插件edslider&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatib…