Python 教学 | Pandas 表格数据行列变换

这篇具有很好参考价值的文章主要介绍了Python 教学 | Pandas 表格数据行列变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Part1前言

Part2行、列的增加和删除

(一)增加列(字段)

(1)在表格尾端添加一列

(2)通过计算得到新字段

(3)指定位置插入字段

(二) 删除列

(三) 增加行

(四) 删除行

Part3表格转置

Part4数据展开与合并

(一) 多行合并为一行

(二) 一行展开为多行

Part5总结

Part6Python教程


Part1前言

Pandas 是专注于表格数据处理的 Python 第三方库,能帮助我们完成各种各样的表格数据操作。上期文章我们介绍了数据清洗中使用 Pandas 处理缺失值和重复值的方法,在常见的数据清洗中,除了针对数据值做处理,有时候也需要对表格的结构做变换操作,最基本的有添加/删除行或列,以及一行变多行、多行并一行、字段之间计算等操作,本期文章我们就向大家介绍如何使用 Pandas 对表格数据做一些基本的行列变换。

本教程基于 pandas 1.5.3 版本书写。

本文中所有 Python 代码均在集成开发环境 Visual Studio Code (VScode) 中使用交互式开发环境 Jupyter Notebook 中编写,本文分享的代码请使用 Jupyter Notebook 打开。

点给原文链接即可查看如何获取本文所有演示代码以及演示用的数据:

Python 教学 | Pandas 表格数据行列变换

Part2行、列的增加和删除

先读取演示用的数据表。

import pandas as pd     # 导入 pandas 库
data = pd.read_excel('./2、工业互联网专题数据库2000-2020.03企业时间分布统计数据.xlsx') # 读取演示数据
data     # 输出查看演示数据

pandas行列转换,Python教学,python,pandas,开发语言

(一)增加列(字段)

处理表格数据时经常需要添加或者删除字段,在 Pandas 中,添加字段的方式不止一种,下面我们来介绍一下。

(1)在表格尾端添加一列

在 Pandas 基础中,我们曾介绍过表示表格(DataFrame,数据框)中一个字段的代码是表格变量名[字段名],例如上文读取的表格数据变量名为data,那么获取年份这一字段的代码就是data['年份'],得到的是一个一维 Series,实际上除了这种表示方法,使用表格变量名.字段名同样可以表示一个字段,例如data.年份。不过使用后者表示字段时需要注意,如果字段名是字符型,则不可以使用引号引起来,且字段名中不能含有空格符.半角括号等在 Python 中具有特殊意义的字符。知道如何表示一个字段后,添加字段也就轻而易举了,我们直接将新添加字段的值赋给新字段即可,不过只能使用表格变量名[字段名]的方式来添加字段,例如下面是添加一个新字段“备注”,取值为“无”的代码。

# 在数据尾端添加一个新字段“备注”, 该字段的所有值都是‘无’
data['备注'] = '无'     # 不可以使用 data.备注='无'
data   # 输出查看 data

pandas行列转换,Python教学,python,pandas,开发语言

这种添加字段的方式在添加时会为整个字段赋予一个指定值,例如上述代码中的'无',这种方式常用于先增加字段,后续再根据情况填充新字段。如果我们想在创建一个新字段的时候,为每一行赋予指定值,可以直接将包含值的列表赋值给新字段,但是需要注意,列表中元素的个数必须与数据表的行数保持一致,即每一行的值都必须指定才行,代码如下。

# 创建新字段时,为每一行设置指定值
data['备注'] = ['', '', '该年份数据有缺失', '', '', '', '',
              '', '', '该年份数据有缺失', '', '', '', '',
              '', '', '', '', '', '', '该年份数据有缺失']   # 数据表共 21 行,则需要填入 21 个值
data   # 输出查看 data

pandas行列转换,Python教学,python,pandas,开发语言

💡  注意,以上两种方式不仅可以用来添加新字段,也可以修改已有字段的内容。

(2)通过计算得到新字段

除了以上两种方式外,我们还可以根据字段之间的运算得到新字段,例如我们想生成一个新字段“净增加企业数”,这个字段的内容是“企业成立数”与“企业死亡数”相减的结果,那么可以使用下面的代码。

# 通过字段之间的计算得到新字段
data['净增加企业数'] = data['企业成立数'] - data['企业死亡数']
data

pandas行列转换,Python教学,python,pandas,开发语言

使用这种(计算)方式生成新字段时需要注意,参与计算的字段之间必须是可以进行运算的,例如两个字段中的值都是数值型,那么它们之间就可以进行加、减、乘、除、幂等基本运算,但如果两个字段中的值不是可以进行运算的,例如字符型和浮点型就无法进行运算,那么运算操作就无法进行。因此需要特别注意参与计算的两个字段,是否存在缺失值,其内部的值是不是可以两两运算。如果有个别的特殊值导致字段之间不能运算,我们还可以使用函数的方式去做处理,不过那是后续文章才要讲的内容。

(3)指定位置插入字段

前面介绍的几种方式都是在表格的尾端创建新字段,很多时候表格的字段之间是有顺序的,添加新字段也要在指定的位置进行。在 Pandas 中,insert()函数就是用来在指定位置插入字段的,使用方法如下。

表格变量名.insert(插入字段的位置, 插入字段的名称, 插入字段的值)

上述伪代码中,插入字段的位置是指待插入字段所在的顺序(默认从 0 开始计算),例如当我们想在演示数据中企业死亡数之后插入一个字段当年净增加企业数,其值是企业成立数字段与企业死亡数字段的差,那么就可以使用下面的代码。

# 先在指定位置(序号为 3)插入一个空字段
data.insert(3, '当年净增加企业数', '')
# 再将计算结果赋值给该字段
data['当年净增加企业数'] = data['企业成立数'] - data['企业死亡数']
data

pandas行列转换,Python教学,python,pandas,开发语言

如果你的表格中字段数量太多,想要快速获取某个字段的序号来做参照,可以使用下面的代码。

# 获取“备注”字段的位置,注意这个位置是从 0 开始计算的
data.columns.get_loc('备注')   # 得到:5

(二) 删除列

在上一期介绍处理缺失值和重复值的文章中,我们提到删除缺失值所在行或列使用的是dropna()函数,而在这里,直接删除行或列的则是drop()函数。两者的区别在于前者是根据表格内数据缺失的情况自动删除数据,而后者是用来删除指定数据行或数据列的。drop()函数的常用参数如下表所示。

pandas行列转换,Python教学,python,pandas,开发语言

例如删除“备注”字段时就可以使用下面的代码 

## 删除“备注”字段,且使删除操作在原数据上生效
# 方法 1
# data.drop(columns='备注', inplace=True) # 或者 data = data.drop(columns='备注'), 但要注意赋值操作和 inplace 参数不可同时使用,否则直接丢失原数据
# 方法 2
data.drop('备注', axis=1, inplace=True) # 或者 data = data.drop('备注', axis=1)
# 方法 3
# data.drop(['备注'], axis=1, inplace=True) # 或者 data = data.drop(['备注'], axis=1)

由于drop()函数默认不会直接修改原数据,所以如果想让删除操作在原数据上生效,就需要主动设置参数inplace=True;或者不设置inplace参数,而是将drop()函数返回的新对象重新赋值给原来的变量名。这段代码中介绍了 6 种删除一个字段的方法,实际操作时使用其中之一即可。如果想要一次性删除表中多个字段,例如删除data中的“当年净增加企业数”和“净增加企业数”两个字段,可以使用下面的代码。

# 删除“当年净增加企业数”和“净增加企业数”两个字段
# 方法 1
# data.drop(['当年净增加企业数', '净增加企业数'], axis=1, inplace=True)  # 或 data = data.drop(['当年净增加企业数', '净增加企业数'], axis=1)
# 方法 2
data.drop(columns=['当年净增加企业数', '净增加企业数'], inplace=True)  # 或 data = data.drop(columns=['当年净增加企业数', '净增加企业数'])、
data

pandas行列转换,Python教学,python,pandas,开发语言

(三) 增加行

Pandas 对数据行的增加并不友好,不像增加数据列那样简单方便,最常见的就是在数据的尾端添加一行数据,下面是添加一行数据的代码。

# 方法 1:使用 append 函数,可能会遇到警告,该函数将会在未来的 pandas 版本中移除
# data = data.append({'年份':2021, '企业成立数':5000, '企业死亡数':2000, '企业存续数':250000}, ignore_index=True) # 添加的一行并非真实统计数据,只做演示用
# 方法 2:使用数据切片(数据选取),注意代码中的 21 是增加数据行的索引值,添加的索引必不能是事先存在于 data 中的
data.loc[21] = {'年份':2021, '企业成立数':5000, '企业死亡数':2000, '企业存续数':250000}
data

pandas行列转换,Python教学,python,pandas,开发语言

除了以上这种增加一行的操作之外,还可以一次性将多行数据添加到一张表中,实际上是通过拼接多个表格实现的,这个我们会在后续的文章中介绍。

(四) 删除行

删除数据行与删除数据列使用的都是drop()函数,这一点我们在上文中介绍drop()函数的参数时已经有提到。删除数据列时,使用的是columns参数,或者在设置参数axis=1的前提下使用labels参数;根据上文中的参数列表,我们可以知道,删除数据行应该使用index参数,或者直接使用labels参数(因为axis参数默认为 0,即默认删除的是数据行)。例如删除索引值为 4,5,6 的数据行可以使用下面的代码。

# 删除索引值为 4,5,6 的数据行,并将删除后的数据赋值给新变量 data_droped
data_droped = data.drop([4,5,6]) # 这里使用的是 labels 参数,与使用 index 参数是一样的效果,因为 axis 的默认值为 0
# 删除后的数据就不再文中展示了

除了直接传入具体的行索引值列表,我们还可以借助数据筛选来获取索引值,并以此达到删除符合条件的数据,例如可以使用下面的代码来删除 2010 年之前的数据。

# 删除 2010 年之前的数据
data_Before2010 = data[data['年份'] < 2010]
# 根据筛选结果的索引值进行删除
data_After2010 = data.drop(data_Before2010.index)  # 也可以直接这样写:data_After2010 = data.drop(data[data['年份'] < 2010].index),这样只需要一句代码就可以了
# 查看删除后的数据值
data_After2010

pandas行列转换,Python教学,python,pandas,开发语言

由于 Pandas 中表格数据类型 DataFrame 的行索引值不会自动变化,所以增加、删除数据行可能会导致行索引变得不连续,如果需要让数据的索引重新变得连续,可以使用reset_index()函数来重置索引,代码如下。

# 重置 data_After2010 的行索引,使其从0 开始且连续
# drop=True 参数表示重置索引后,原来的索引会被删除,如果不设置此参数,原来的索引值会自动添加到数据中,字段名为“index”
# 同 drop() 函数一样,reset_index() 也会返回一个新对象,而不是直接修改原数据,如果希望重置索引操作在原数据上生效
# 可以使用赋值方式,或者在 reset_index() 中设置参数 inplace=True
data_After2010 = data_After2010.reset_index(drop=True) 
data_After2010   # 查看重置索引后的值

pandas行列转换,Python教学,python,pandas,开发语言

Part3表格转置

什么是转置?首先,转置是一个数学名词,是线性代数中矩阵的一种变换。我们常用的表格数据实际上就是一种矩阵,所以也有转置操作,那么转置到底是一种怎么样的数据操作呢?在表格中,转置就是表格沿着数据的左上角与右下角形成的对角线进行翻转,最后转置前数据的第 n 行就会变成转置后数据的第 n 列,如下图所示。

pandas行列转换,Python教学,python,pandas,开发语言

有时候遇到一些需要做行列转换的数据,就可以使用 Pandas 来对数据做转置操作,转置后数据框(DataFrame)的行索引和列索引(即字段名)也会互换位置,下面是对上文中表格数据data_After2010做转置的代码。

# 代码【数据框.T】就可以返回转置后的数据了 
data_转置 = data_After2010.T
data_转置

pandas行列转换,Python教学,python,pandas,开发语言

Part4数据展开与合并

一些时候过多的数据都被存放在一个单元格中,为了让数据更清晰,或者为了匹配数据,需要对数据做“展开”,将一行数据变为多行数据;而有时候为了减少数据量,又要去做相反的处理,将多行数据合并到一行。下面我们以数据变量清单表为例,演示如何进行上述操作,下面先读取演示数据。

# 读取演示数据
DATA = pd.read_excel('./1、工业互联网变量清单.xlsx', usecols=['表名称', '字段名称'])

pandas行列转换,Python教学,python,pandas,开发语言pandas行列转换,Python教学,python,pandas,开发语言

 💡 如果 Excel 表中存在合并的单元格,那么经过 Pandas 读取后,合并区域中只有左上方的小单元格内有值,其余区域都是空值,如上图所示。

(一) 多行合并为一行

我们的目的是将上图中“字段名称”列中的值根据“表名称”列进行合并。也就是说根据第一列对第二列做合并,那么多行合并一行的代码如下。

# 由于【表名称】字段的原始数据是合并的单元格,所以合并前需要做向下填充操作
# 向下填充,就是在一列数据中使用上一个非空值来填充下面的缺失值,操作方式如下
DATA['表名称'] = DATA['表名称'].ffill()

# 然后再进行合并数据行
# 先定义拼接函数,并对字段进行去重
def concat_func(x):
    return pd.Series({'字段名称':'、'.join(x['字段名称'])})
# 分组聚合 + 拼接
DATA_合并 = DATA.groupby(DATA['表名称']).apply(concat_func).reset_index()
DATA_合并    # 合并后数据的顺序会乱

pandas行列转换,Python教学,python,pandas,开发语言

(二) 一行展开为多行

除了能够将多行数据合并为一行,Pandas 还可以将一行数据展开为多行数据,而且更加简单,下面我们来对上图所示数据注意一个反向的展开操作,代码如下。

# 第一步,先使用匿名函数将可展开的字符转为列表
DATA_合并['字段名称'] = DATA_合并['字段名称'].apply(lambda x: x.split('、'))
# 第二步,使用 explode() 函数对【字段名称】列做展开操作
DATA_展开 = DATA_合并.explode('字段名称')
DATA_展开

pandas行列转换,Python教学,python,pandas,开发语言

以上就是本期 pandas 表格行列变换的全部内容。

Part5总结

Pandas 在处理表格数据方面是一个重要工具,除了完成一些常见的筛选,分析操作,当需要重构数据或者进行一些较复杂的数据处理时,必然需要使用更加精细的数据操作。本文介绍的正是在行列数据处理的一些技巧,熟悉这些技巧能让我们在数据处理中更加游刃有余。

Part6Python教程


pandas行列转换,Python教学,python,pandas,开发语言

(向下滑动查看更多)

  • Python教学 | 学习 Python 第一步——环境安装与配置

  • Python教学 | Python 基本数据类型

  • Python教学 | Python 字符串操作(上)

  • Python教学 | Python 字符串操作(下)

  • Python教学 | Python 变量与基本运算

  • Python教学 | 组合数据类型-列表

  • Python教学 | 组合数据类型-集合(内含实例)

  • Python教学 | 组合数据类型 - 字典&元组

  • Python教学 | Python 中的分支结构(判断语句)

  • Python教学 | Python 中的循环结构(上)

  • Python教学 | Python 中的循环结构(下)

  • Python教学 | Python函数的定义与调用

  • Python教学 | Python 内置函数

  • Python教学 | 最常用的标准库之一 —— os

  • Python教学 | 盘点 Python 数据处理常用标准库

  • Python 教学 | “小白”友好型正则表达式教学(一)

  • Python 教学 | “小白”友好型正则表达式教学(二)

  • Python 教学 | “小白”友好型正则表达式教学(三)

  • Python 教学 | 数据处理必备工具之 Pandas(基础篇)

  • Python 教学 | 数据处理必备工具之 Pandas(数据的读取与导出)

  • Python 教学 | Pandas 数据索引与数据选取

  • Python 教学 | Pandas 妙不可言的条件数据筛选

  • Python 教学 | Pandas 缺失值与重复值的处理方法

  • 本期 文章来源地址https://www.toymoban.com/news/detail-713298.html

到了这里,关于Python 教学 | Pandas 表格数据行列变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python pandas 获取Excel文件下所有的sheet名称,表格数据

    方法1: 一定要加sheet_name=None,才能读取出所有的sheet,否则默认读取第一个sheet,且获取到的keys是第一行的值 方法2:

    2024年02月13日
    浏览(38)
  • python爬虫——抓取表格pandas当爬虫用超简单

    pandas还能当爬虫用,你敢信吗?而且超级简单,两行代码就趴下来 只要想提取的表格是属于table 标签内,就可以使用pd.read_html(),它可以将网页上的表格都抓取下来,并以DataFrame的形式装在一个列表中返回。 例子: 比如这个基金网站,想趴下基金的持仓股表格, http://vip.s

    2024年01月23日
    浏览(30)
  • 【机器学习5】数据处理(二)Pandas:表格处理

    Pandas提供了三种数据类型,分别是 Series 、 DataFrame 和 Panel 。Series用于保存一维数据,DataFrame用于保存二维数据,Panel用于保存三维数据或者可变维数据。平时的表格处理数据分析最常用的数据类型是 Series 和 DataFrame ,Panel较少用到。 Series本质上是一个含有索引的 一维数组

    2024年02月13日
    浏览(31)
  • (九)Pandas表格样式 学习简要笔记 #Python #CDA学习打卡

    目录 一. Pandas表格样式 1)举例数据 2)字体颜色 3)背景高亮 4)极值背景高亮 (a)高亮最大值 highlight_max() (b)高亮最小值 highlight_min() (c)同时高亮最大值与最小值 5)横向对比 (a)标记出每个学生的单科最高分数 axis (b)选定一列的最大值高亮 subset 6)背景渐变 

    2024年04月26日
    浏览(26)
  • python 爬虫热身篇 使用 requests 库通过 HTTP 读取网络数据,使用 pandas 读取网页上的表格,使用 Selenium 模拟浏览器操作

    在过去,收集数据是一项繁琐的工作,有时非常昂贵。机器学习项目不能没有数据。幸运的是,我们现在在网络上有很多数据可供我们使用。我们可以从 Web 复制数据来创建数据集。我们可以手动下载文件并将其保存到磁盘。但是,我们可以通过自动化数据收集来更有效地做

    2023年04月08日
    浏览(47)
  • [数据分析实战]对比用Excel和Python用来做数据分析的优缺点,用Python的Pandas操作Excel数据表格原来如此简单?还不赶紧学起来?

    目录 首先,我先总结一下用Excel和Python用来做数据分析的优缺点 Excel做数据分析的优点: Excel做数据分析的缺点: Python做数据分析的优点: Python做数据分析的缺点: 1.展示本例子中使用的数据 2.开始动手 一、导入数据以及理解数据部分  1.1查看数据维度(行列) 2.2.查看数据格

    2024年02月04日
    浏览(29)
  • 数据分析-Pandas如何转换产生新列

    时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 N O 2 ​ 数据作为样例。 python数据分析-数据表读写到pandas 经典算法-遗传算法的python实现 经典算法-遗传算法的一个简单例子 大

    2024年01月16日
    浏览(26)
  • Pandas实战100例 | 案例 31: 转换为分类数据

    案例 31: 转换为分类数据 知识点讲解 在处理包含文本数据的 DataFrame 时,将文本列转换为分类数据类型通常是一个好主意。这可以提高性能并节省内存。Pandas 允许将列转换为 category 类型。 分类数据类型 : category 类型适用于那些只包含有限数量不同值的列(例如,性别、产品

    2024年02月02日
    浏览(33)
  • Python的pandas库来实现将Excel文件转换为JSON格式的操作

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Python案例分享专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Python的pandas库来实现

    2024年02月09日
    浏览(34)
  • Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将...

    Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将List转换为DataFrame对象呢?本文将介绍如何使用Python中Pandas库将List转换为DataFrame,并进一步将其转换为字符串。 将Python List转换为Pandas D

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包