标签: wps office的免费版的下载的地址

  • 官网wps的最新的下载的网址是什么

      国家有关部门下发关于整治WPS office的电脑版的下载网站怎么找“挖矿”活动的通知,在学校内主动或者被动“挖矿”都是严重影wps的官网最新的下载地方(wps office下载pc)响教学资源和网络安全的违规行为。主动挖矿是指主动实施“挖矿”行为;被动“挖矿”是指因计算机感染“挖矿”病毒,在不知情的情况下被动参与“挖矿”活动。

    wps office的免费版下载网站怎么找  我校全体师生应规范上网、文明上网,落实个人网络安全责任,保护好自己(学校)的计算机,杜绝挖矿行为。本文为大家科普挖矿病毒知识,向“挖矿” say no!

      什么是挖矿病毒?wps office免费版下载的地址
    wps office免费版的下载地址怎么找
      网络黑客将挖矿程序伪装成一个正常文件植入受害者的计算机中,在受害者不知情的情况下利用其计算机的算力进行挖矿,从而获取WPS WPS office的电脑版的下载的方法 office的电脑版的下载网站怎么找的利益。挖矿病毒本质上就是非法植入用户计算机的一段代码或者一个软件。

      为什么会中挖矿病毒?

      “挖矿病毒”一般因为疏于安全防护而感染:

      1、垃圾邮件:用户点击了钓鱼邮件并运行了含病毒的附件。

      2、软件捆绑:用户下载运行了非官方的破解软件。官网wps 的最新下载的地址是多少

      3、漏洞传播:用户的操作系统或软件存在漏洞,黑客利用漏洞植入挖矿病毒。

      4、网页挖矿:用户访问了来历不明的网页,该网页被植入挖矿脚本,浏览器会运行脚本进行挖矿。

      挖矿病毒有什么危害?

      如果你的电脑容易卡顿,在没有使用软件的情况下CPU使用率很高,电脑发热严重,可能是中了挖矿病毒。挖矿病毒会导致我们的电wps office 官方下载地方(wps官网首页登入)脑:

      (1)使用体验感差,不能及时响应用户请求。

      (2)浪费带宽和电力资源,加快CPU、内存等硬件老化速度。

      (3)发生数据泄露的网络安全事件,黑客可能控制受害主机,窃取个人和金融信息,造成财产损失。

      如何预防挖矿病毒?

      1、定期使用独立的外置移动硬盘或者网络存储备份当前系统的重要数据,以免中毒后数据无法恢复;

      2、设置系统用户时避免使用弱口令,建议口令密码不少于8个字符,至少包含大小写字符和数字。对Linux用户,如果需要使用SSH服务,建议设置禁止密码远程登录,改用证书认证方式登录;

      3、手动关闭系统默认开启但并不使用的服务,检查并关闭系统的默认文件共享服务、网站服务等;

      4、开启防火墙,限制可以连接计算机(服务器)的IP来源,默认屏蔽任何不受信地址的连接请求;

      5、安装杀毒软件,开启实时防护和自动更新。虽然杀毒软件不一定能完全清除已经感染的木马,但其实时防护能够抵御恶意软件入侵;

      6、避免使用盗版软件、破解软件或者来源不明的软件,只安装可信来源的软件;

      7、不要随意打开来自聊天工具或邮件传输的不明文件;

      8、设置系统自动更新功能,时刻保持系统更新状态,防止因为漏洞感染病毒wps office的免费版的下载的地址。

      若被通知在“挖矿”,我们可以做些啥电脑版wps下载网址是多少?!

      排查杀毒是首要的,一般专杀和全盘查杀相结合:

      (1)首先卸载计算机中已安装的失效安全软件,如360全家桶、金山毒霸、电脑管家等,

      Win10-开始-设置-应用-应用和功能,选择不需要的软件进行卸载,卸载完毕后最好重启一次计算机。

      Win7-开始-控制面板-程序-卸载程序

      (2)接着下载查杀工具

      打开网址https://www.huorong.cn/获取查杀软件。

      (3)安装完毕后选择全盘查杀。

      (4)查杀完毕后,重启计算机再查杀一次,不再出现新病毒则视为清除干净。

  • 官网WPS office的下载网址怎么找

      php小编草莓精心整理了2023年最靠谱的十大WPS office的电脑版的下载网站怎么找交易平台排名,为广大投资者提供参考。随着WPS office的电脑版的下载网站怎么找市场的不断发展,选择一个安全可靠的交易所成为投资的关键。这些交易平台具备高度的安全性、稳定的交易系统、丰富的交易品种以及优质的用户体验,为投资者提供了一个可信赖的交易环境。无论是新手还是老手,都可以在这些交易所中找到适合自己的交易策略,实现财富增值的目标。

      Coinbase WPS office电脑版下载的方法在哪里 是全球最大的比特币交易平台之一,备受投资者信赖。该平台深谙区块链技术,为用户提供安全可靠的存储工具,并为投资者提供完善的WPS office的电脑版的下载网站怎么找投资组合管理平台。Coinbase 的出色表现使其成为许多人心中最可靠的WPS office的电脑版的下载网站怎么找交易所之一。

      Kraken wps的电脑版的下载网站是多少 作为一家较大的交易所,在稳健和安全方面表现出色,给人以信心官方wps office 官方的下载网站怎么找(wps下载电脑版下载免费版安卓)。它还支持多种WPS office的电脑版的下载网站怎么找,交易量不断增加,用户流量也在逐渐上升。

      Bitstamp已经存在多年,以其安全和稳定著称。对于欧洲用户来说,交易更加轻松且手续费通常比其他交易平台低。尽管它只有10年的运营时间,但其声誉已经在WPS office的电脑版的下载网站怎么找社区中广为传播。

      Binance 是一家备受赞誉的亚洲WPS office的电脑版的下载网站怎么找交易所。其出色的加密技术和严密的安全保障措施给用户提供了安心交易的环境。此外,Binance 还提供丰富多样的二元期权和STO服务,满足了用户的多样化需求。

      Bitfinex以其卓越的平台交易功能和高交易量而闻名。它实施了备受争议的Tether(USDT)稳定币运作,旨在保护比特币价格。此外,该交易所的用户界面也备受赞誉。

      作为一家知名的WPS office的电脑版的下载网站怎么找交易平台,Huobi凭借其在行业中的权威地位,赢得了市场广泛的认可wps office的免费版的下载的地址。它提供了一系列优秀的交易工具,并且其性价比优惠的收费设置使其在激烈的市场竞争中处于领先地位。

      根据多位比特币交易员的说法,BitMEX是目前唯一一家全球流动性最佳的WPS office的电脑版的下载网站怎么找衍生品交易平台。其独特的“永续合约”交易模式以及庞大的规模,使其在市场上占据了重要的一席之地官网wps下载网址怎么找。官网wps最新的下载的地址的方法

      eToro是一家提供交易平台的公司,它包含200种不同类型的金融资产。用户可以在该平台上进行WPS office的电脑版的下载网站怎么找、股票、外汇、商品等多种交易。此外,eToro还提供社交化投资wps官网最新下载入口在哪功能,投资者可以通过交流经验、学习和分享投资技巧,轻松地进行投资。

      OKEx 是一家总部位于香港的WPS office的电脑版的下载网站怎么找交易所,其在用户投资和交易方面提供了坚实的支持和保证。平台稳定、交易量大、手续费低,因此获得了全球广泛的用户支持和信任。

      Upbit 于2017年作为一家韩国的WPS office的电脑版的下载网站怎么找交易平台上线,其目的是为用户提供安全、透明的交易环境wps的官网的下载地址的方法。它使用冷热双钱包系统,实现了充分的安全保障,因此得到全球WPS office的电脑版的下载网站怎么找交易者的广泛认同。wps的免费版的下载的入口

      总的来说,这些WPS office的电脑版的下载网站怎么找交易所不仅具有高度的商业价值,而且能够满足投资者和交易者的安全需求。当然,尽管存在某些风险,但只要正确的理解和控制风险,并选择可靠的交易平台,投资WPS office的电脑版的下载网站怎么找也可以获得较高的收益。

      以上就是十大WPS office的电脑版的下载网站怎么找交易平台排名 最靠谱的WPS office的电脑版的下载网站怎么找交易所2023的详细内容,更多请关注php中文网其它相关文章!

  • wps电脑版的下载的地方是什么

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

    wps office免费版的下载地方怎么找
      此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。

      如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。

      读取数据并使其可访问(通常称为数据加载)是使用本书中大多数工具的必要第一步。术语解析有时也用于描述加载文本数据并将其解释为表格和不同数据类型。我将专注于使用 pandas 进行数据输入和输出,尽管其他库中有许多工具可帮助读取和写入各种格式的数据。

      输入和输出通常分为几个主要类别:读取文本文件和其他更高效的磁盘格式、从数据库加载数据以及与网络源(如 Web API)交互。

      pandas 提供了许多函数,用于将表格数据读取为 DataFrame 对象。表 6.1 总结了其中一些;是本书中最常用的之一。我们将在二进制数据格式中稍后查看二进制数据格式。

      表 6.1:pandas 中的文本和二进制数据加载函数

      函数描述从文件、URL 或类似文件的对象中加载分隔数据;使用逗号作为默认分隔符以固定宽度列格式读取数据(即没有分隔符)读取剪贴板中的数据的变体;用于将网页上的表格转换的有用工具从 Excel XLS 或 XLSX 文件中读取表格数据读取 pandas 写入的 HDF5 文件读取给定 HTML 文档中找到的所有表格从 JSON(JavaScript 对象表示)字符串表示、文件、URL 或类似文件的对象中读取数据读取 Feather 二进制文件格式读取 Apache ORC 二进制文件格式读取 Apache Parquet 二进制文件格式使用 Python pickle 格式读取由 pandas 存储的对象读取存储在 SAS 系统的自定义存储格式之一中的 SAS 数据集读取由 SPSS 创建的数据文件读取 SQL 查询的结果(使用 SQLAlchemy)读取整个 SQL 表(使用 SQLAlchemy);等同于使用选择该表中的所有内容的查询使用从 Stata 文件格式中读取数据集从 XML 文件中读取数据表

      我将概述这些函数的机制,这些函数旨在将文本数据转换为 DataFrame。这些函数的可选参数可能属于几个类别:

      索引

      可以将一个或多个列视为返回的 DataFrame,并确定是否从文件、您提供的参数或根本不获取列名。

      类型推断和数据转换

      包括用户定义的值转换和自定义缺失值标记列表。

      日期和时间解析

      包括一种组合能力,包括将分布在多个列中的日期和时间信息组合成结果中的单个列。

      迭代

      支持迭代处理非常大文件的块。

      不干净的数据问题

      包括跳过行或页脚、注释或其他像数字数据以逗号分隔的小事物。

      由于现实世界中的数据可能会很混乱,一些数据加载函数(特别是)随着时间的推移积累了很长的可选参数列表WPS office电脑版的下载的网站怎么找。对于不同参数的数量感到不知所措是正常的(大约有 50 个)。在线 pandas 文档有许多关于每个参数如何工作的示例,因此如果您在阅读特定文件时感到困惑,可能会有足够相似的示例帮助您找到正确的参数。

      其中一些函数执行类型推断,因为列数据类型不是数据格式的一部分。这意味着您不一定需要指定哪些列是数字、整数、布尔值或字符串。其他数据格式,如 HDF5、ORC 和 Parquet,将数据类型信息嵌入到格式中。

      处理日期和其他自定义类型可能需要额外的努力。

      让我们从一个小的逗号分隔值(CSV)文本文件开始:

      注意wps office的免费版的下载的地址

      这里我使用了 Unix 的 shell 命令将文件的原始内容打印到屏幕上。如果您使用 Windows,可以在 Windows 终端(或命令行)中使用代替来实现相同的效果。

      由于这是逗号分隔的,我们可以使用将其读入 DataFrame:

      文件不总是有标题行。考虑这个文件:

      要读取此文件,您有几个选项。您可以允许 pandas 分配默认列名,或者您可以自己指定名称:

      假设您希望列成为返回的 DataFrame 的索引。您可以使用参数指示您希望在索引 4 处或使用名称:

      如果要从多个列创建分层索引(在 Ch 8.1:分层索引中讨论),请传递列编号或名称的列表:

      在某些情况下,表格可能没有固定的分隔符,而是使用空格或其他模式来分隔字段。考虑一个看起来像这样的文本文件:

      虽然您可以手动进行一些数据处理,但这里的字段是由可变数量的空格分隔的。在这些情况下,您可以将正则表达式作为的分隔符传递。这可以通过正则表达式表示,因此我们有:

      由于列名比数据行数少一个,推断在这种特殊情况下第一列应该是 DataFrame 的索引。

      文件解析函数有许多额外的参数,可帮助您处理发生的各种异常文件格式(请参见表 6.2 中的部分列表)。例如,您可以使用跳过文件的第一、第三和第四行:

      处理缺失值是文件读取过程中重要且经常微妙的部分。缺失数据通常要么不存在(空字符串),要么由某个标记(占位符)值标记。默认情况下,pandas 使用一组常见的标记,例如和:

      请记住,pandas 将缺失值输出为,因此在中有两个空值或缺失值:

      选项接受一个字符串序列,用于添加到默认识别为缺失的字符串列表中:

      有许多默认的 NA 值表示列表,但这些默认值可以通过选项禁用:

      可以在字典中为每列指定不同的 NA 标记:

      表 6.2 列出了中一些经常使用的选项。

      表 6.2:一些函数参数

      参数描述指示文件系统位置、URL 或类似文件的字符串。或用于在每行中拆分字段的字符序列或正则表达式。用作列名的行号;默认为 0(第一行),但如果没有标题行,则应为。用作结果中行索引的列号或名称;可以是单个名称/编号或用于分层索引的列表。结果的列名列表。要忽略的文件开头的行数或要跳过的行号列表(从 0 开始)。要替换为 NA 的值序列。除非传递,否则它们将添加到默认列表中。是否使用默认的 NA 值列表(默认为)。用于将注释从行末分隔出来的字符。尝试解析数据为;默认为。如果为,将尝试解析所有列。否则,可以指定要解析的列号或名称的列表。如果列表的元素是元组或列表,则将多个列组合在一起并解析为日期(例如,如果日期/时间跨越两列)。如果连接列以解析日期,则保留连接的列;默认为。包含列号或名称映射到函数的字典(例如,将对列中的所有值应用函数)。在解析可能模糊的日期时,将其视为国际格式(例如,7/6/2012 -> 2012 年 6 月 7 日);默认为。用于解析日期的函数。从文件开头读取的行数(不包括标题)。返回一个用于逐步读取文件的对象。此对象也可以与语句一起使用。用于迭代的文件块的大小。要忽略的文件末尾行数。打印各种解析信息,如文件转换各阶段所花费的时间和内存使用信息。文本编码(例如,UTF-8 编码文本的)。如果为,默认为。如果解析的数据只包含一列,则返回一个 Series。千位分隔符(例如,或);默认为。数字中的小数分隔符(例如,或);默认为。要使用的 CSV 解析和转换引擎;可以是、或之一。默认为,尽管较新的引擎可以更快地解析一些文件。引擎速度较慢,但支持其他引擎不支持的一些功能。

      分块读取文本文件

      在处理非常大的文件或找出正确的参数集以正确处理大文件时,您可能只想读取文件的一小部分或迭代文件的较小块。

      在查看大文件之前,我们将 pandas 显示设置更加紧凑:

      现在我们有:

      省略号表示已省略数据框中间的行。

      如果您只想读取少量行(避免读取整个文件),请使用指定:

      要分块读取文件,指定一个作为行数的:

      由返回的对象允许您根据迭代文件的部分。例如,我们可以迭代,聚合列中的值计数,如下所示:

      然后我们有:

      还配备有一个方法,使您能够以任意大小读取文件的片段。

      将数据写入文本格式

      数据也可以导出为分隔格式。让我们考虑之前读取的一个 CSV 文件:

      使用 DataFrame 的 方法,我们可以将数据写入逗号分隔的文件:

      当然也可以使用其他分隔符(写入到 以便将文本结果打印到控制台而不是文件):

      缺失值在输出中显示为空字符串。您可能希望用其他标记值来表示它们:

      如果未指定其他选项,则将同时写入行标签和列标签。这两者都可以禁用:

      您还可以仅写入列的子集,并按您选择的顺序进行写入:

      处理其他分隔格式

      使用函数如 可以从磁盘加载大多数形式的表格数据。然而,在某些情况下,可能需要一些手动处理。接收到一个或多个格式错误的行可能会导致 出错。为了说明基本工具,考虑一个小的 CSV 文件:

      对于任何具有单字符分隔符的文件,您可以使用 Python 的内置 模块。要使用它,将任何打开的文件或类似文件的对象传递给 :

      像处理文件一样迭代读取器会产生去除任何引号字符的值列表:

      然后,您需要进行必要的整理以将数据放入所需的形式。让我们一步一步来。首先,我们将文件读取为行列表:

      然后我们将行分割为标题行和数据行:

      然后我们可以使用字典推导和表达式 创建数据列的字典(请注意,这将在大文件上使用大量内存),将行转置为列:

      CSV 文件有许多不同的风格。要定义一个具有不同分隔符、字符串引用约定或行终止符的新格式,我们可以定义一个简单的 的子类:

      我们还可以将单独的 CSV 方言参数作为关键字传递给 ,而无需定义子类:

      可能的选项( 的属性)及其作用可以在 表 6.3 中找到。

      表 6.3: CSV 选项

      参数描述用于分隔字段的单字符字符串;默认为 。用于写入的行终止符;默认为 。读取器会忽略这个并识别跨平台的行终止符。用于具有特殊字符(如分隔符)的字段的引用字符;默认为 。引用约定。选项包括 (引用所有字段)、(只有包含特殊字符如分隔符的字段)、 和 (不引用)。详细信息请参阅 Python 的文档。默认为 。忽略每个分隔符后的空格;默认为 。如何处理字段内的引用字符;如果为 ,则会加倍(请查看在线文档以获取完整的详细信息和行为)。如果 设置为 ,用于转义分隔符的字符串;默认情况下禁用。

      注意

      对于具有更复杂或固定多字符分隔符的文件,您将无法使用 模块。在这些情况下,您将需要使用字符串的 方法或正则表达式方法 进行行分割和其他清理。幸运的是,如果传递必要的选项, 能够几乎做任何您需要的事情,因此您很少需要手动解析文件。

      要 手动 写入分隔文件,可以使用 。它接受一个打开的可写文件对象以及与 相同的方言和格式选项:

      JSON 数据

      JSON(JavaScript 对象表示法的缩写)已经成为在 Web 浏览器和其他应用程序之间通过 HTTP 请求发送数据的标准格式之一。它是比 CSV 等表格文本形式更自由的数据格式。这里是一个例子:

      JSON 几乎是有效的 Python 代码,只是其空值和一些其他细微差别(例如不允许在列表末尾使用逗号)。基本类型是对象(字典)、数组(列表)、字符串、数字、布尔值和空值。对象中的所有键都必须是字符串。有几个 Python 库可用于读取和写入 JSON 数据。我将在这里使用,因为它内置在 Python 标准库中。要将 JSON 字符串转换为 Python 形式,请使用:

      ,另一方面,将 Python 对象转换回 JSON:

      如何将 JSON 对象或对象列表转换为 DataFrame 或其他数据结构以进行分析将取决于您。方便的是,您可以将字典列表(先前是 JSON 对象)传递给 DataFrame 构造函数并选择数据字段的子集:

      可以自动将特定排列的 JSON 数据集转换为 Series 或 DataFrame。例如:

      的默认选项假定 JSON 数组中的每个对象是表中的一行:

      有关阅读和操作 JSON 数据的扩展示例(包括嵌套记录),请参见第十三章:数据分析示例中的美国农业部食品数据库示例。

      如果您需要将数据从 pandas 导出为 JSON,一种方法是在 Series 和 DataFrame 上使用方法:

      XML 和 HTML:网络抓取

      Python 有许多用于读取和写入 HTML 和 XML 格式数据的库。示例包括 lxml、Beautiful Soup 和 html5lib。虽然 lxml 通常在一般情况下更快,但其他库可以更好地处理格式不正确的 HTML 或 XML 文件。

      pandas 有一个内置函数,它使用所有这些库自动将 HTML 文件中的表格解析为 DataFrame 对象。为了展示这是如何工作的,我下载了一个 HTML 文件(在 pandas 文档中使用)从美国联邦存款保险公司显示银行倒闭。¹首先,您必须安装一些使用的附加库:

      如果您没有使用 conda,也应该可以工作。

      函数有许多选项,但默认情况下它会搜索并尝试解析包含在标签中的所有表格数据。结果是一个 DataFrame 对象的列表:

      由于有许多列,pandas 会插入一个换行符。

      正如您将在后面的章节中了解到的那样,从这里我们可以继续进行一些数据清理和分析,比如计算每年的银行倒闭次数:

      使用解析 XML

      XML 是另一种常见的结构化数据格式,支持具有元数据的分层嵌套数据。您当前正在阅读的书实际上是从一系列大型 XML 文档创建的。

      之前,我展示了函数,它在底层使用 lxml 或 Beautiful Soup 来解析 HTML 中的数据。XML 和 HTML 在结构上相似,但 XML 更通用。在这里,我将展示如何使用 lxml 来解析更一般的 XML 格式中的数据的示例。

      多年来,纽约大都会交通管理局(MTA)以 XML 格式发布了许多关于其公交车和火车服务的数据系列。在这里,我们将查看性能数据,这些数据包含在一组 XML 文件中。每个火车或公交车服务都有一个不同的文件(例如Performance_MNR.xml用于 Metro-North Railroad),其中包含作为一系列 XML 记录的月度数据,看起来像这样:

      使用,我们解析文件并获取 XML 文件的根节点的引用:

      返回一个生成器,产生每个 XML 元素。对于每条记录,我们可以通过运行以下代码填充一个标签名称(如)到数据值(排除一些标签)的字典:

      最后,将这个字典列表转换为 DataFrame:

      pandas 的函数将此过程转换为一行表达式:

      对于更复杂的 XML 文档,请参考的文档字符串,其中描述了如何进行选择和过滤以提取感兴趣的特定表格。

      以二进制格式存储(或序列化)数据的一种简单方法是使用 Python 的内置模块。所有 pandas 对象都有一个方法,它以 pickle 格式将数据写入磁盘:

      Pickle 文件通常只能在 Python 中读取。您可以直接使用内置的读取存储在文件中的任何“pickled”对象,或者更方便地使用:

      注意

      仅建议作为短期存储格式。问题在于很难保证格式随时间稳定;今天使用 pickle 的对象可能无法在以后的库版本中解除 pickle。pandas 在可能的情况下尽力保持向后兼容性,但在将来的某个时候可能需要“破坏”pickle 格式。

      pandas 内置支持其他几种开源二进制数据格式,例如 HDF5、ORC 和 Apache Parquet。例如,如果安装包(),则可以使用读取 Parquet 文件:

      我将在 HDF5 格式使用中给出一些 HDF5 示例。我鼓励您探索不同的文件格式,看看它们的速度和对您的分析工作的适用性。

      读取 Microsoft Excel 文件

      pandas 还支持使用类或函数读取存储在 Excel 2003(及更高版本)文件中的表格数据。在内部,这些工具使用附加包和来分别读取旧式 XLS 和新式 XLSX 文件。这些必须使用 pip 或 conda 单独安装,而不是从 pandas 安装:

      要使用,请通过传递路径到或文件来创建一个实例:

      此对象可以显示文件中可用工作表名称的列表:

      可以使用将工作表中存储的数据读入 DataFrame:

      此 Excel 表具有索引列,因此我们可以使用参数指示:

      如果要在一个文件中读取多个工作表,则创建会更快,但您也可以简单地将文件名传递给:

      要将 pandas 数据写入 Excel 格式,必须首先创建一个,然后使用 pandas 对象的方法将数据写入其中:

      您还可以将文件路径传递给,避免使用:

      使用 HDF5 格式

      HDF5 是一种受尊敬的文件格式,用于存储大量科学数组数据。它作为一个 C 库可用,并且在许多其他语言中都有接口,包括 Java、Julia、MATLAB 和 Python。HDF5 中的“HDF”代表分层数据格式。每个 HDF5 文件可以存储多个数据集和支持的元数据。与更简单的格式相比,HDF5 支持各种压缩模式的即时压缩,使具有重复模式的数据能够更有效地存储。HDF5 可以是处理不适合内存的数据集的良好选择,因为您可以有效地读取和写入更大数组的小部分。

      要开始使用 HDF5 和 pandas,您必须首先通过使用 conda 安装包来安装 PyTables:

      注意

      请注意,PyTables 包在 PyPI 中称为“tables”,因此如果您使用 pip 安装,您将需要运行。

      虽然可以直接使用 PyTables 或 h5py 库访问 HDF5 文件,但 pandas 提供了一个简化存储 Series 和 DataFrame 对象的高级接口。类的工作方式类似于字典,并处理底层细节:

      然后可以使用相同类似字典的 API 检索 HDF5 文件中包含的对象:

      支持两种存储模式,和(默认为)。后者通常较慢,但支持使用特殊语法进行查询操作:

      是方法的显式版本,但允许我们设置其他选项,如存储格式。

      函数为您提供了这些工具的快捷方式:

      如果您愿意,可以删除您创建的 HDF5 文件,方法如下:

      注意

      如果您正在处理存储在远程服务器上的数据,如 Amazon S3 或 HDFS,使用设计用于分布式存储的不同二进制格式(如Apache Parquet)可能更合适。

      如果您在本地处理大量数据,我建议您探索 PyTables 和 h5py,看看它们如何满足您的需求。由于许多数据分析问题受 I/O 限制(而不是 CPU 限制),使用 HDF5 等工具可以大大加速您的应用程序。

      注意

      HDF5 不是数据库。它最适合于一次写入,多次读取的数据集。虽然数据可以随时添加到文件中,但如果多个写入者同时这样做,文件可能会损坏。

      许多网站都有提供数据源的公共 API,可以通过 JSON 或其他格式提供数据。有许多方法可以从 Python 访问这些 API;我推荐的一种方法是包,可以使用 pip 或 conda 进行安装:

      要在 GitHub 上找到 pandas 的最近 30 个问题,我们可以使用附加的库进行 HTTP 请求:

      在使用后,始终调用以检查 HTTP 错误是一个好习惯。

      响应对象的方法将返回一个包含解析后的 JSON 数据的 Python 对象,作为字典或列表(取决于返回的 JSON 是什么):

      由于检索到的结果基于实时数据,当您运行此代码时,您看到的结果几乎肯定会有所不同。

      中的每个元素都是一个包含 GitHub 问题页面上找到的所有数据的字典(评论除外)。我们可以直接将传递给并提取感兴趣的字段:

      通过一些努力,您可以创建一些更高级的接口,用于常见的 Web API,返回 DataFrame 对象以便进行更方便的分析。

      在商业环境中,许多数据可能不存储在文本或 Excel 文件中。基于 SQL 的关系数据库(如 SQL Server、PostgreSQL 和 MySQL)被广泛使用,许多替代数据库也变得非常流行。数据库的选择通常取决于应用程序的性能、数据完整性和可扩展性需求。

      pandas 有一些函数可以简化将 SQL 查询结果加载到 DataFrame 中。例如,我将使用 Python 内置的驱动程序创建一个 SQLite3 数据库:

      然后,插入一些数据行:

      大多数 Python SQL 驱动程序在从表中选择数据时返回一个元组列表:

      您可以将元组列表传递给 DataFrame 构造函数,但还需要列名,这些列名包含在游标的属性中。请注意,对于 SQLite3,游标的仅提供列名(其他字段,这些字段是 Python 的数据库 API 规范的一部分,为),但对于其他一些数据库驱动程序,提供了更多的列信息:

      这是一种相当复杂的操作,您不希望每次查询数据库时都重复。SQLAlchemy 项目是一个流行的 Python SQL 工具包,它抽象了 SQL 数据库之间的许多常见差异。pandas 有一个函数,可以让您轻松地从通用的 SQLAlchemy 连接中读取数据。您可以像这样使用 conda 安装 SQLAlchemy:

      现在,我们将使用 SQLAlchemy 连接到相同的 SQLite 数据库,并从之前创建的表中读取数据:

      获取数据通常是数据分析过程中的第一步。在本章中,我们已经介绍了一些有用的工具,这些工具应该可以帮助您入门。在接下来的章节中,我们将深入探讨数据整理、数据可视化、时间序列分析等主题。

      完整列表请参见。

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

      此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。

      如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。

      在进行数据分析和建模过程中,大量时间花费在数据准备上:加载、清理、转换和重新排列。这些任务通常被报告为占据分析师 80%或更多的时间。有时,文件或数据库中存储数据的方式并不适合特定任务。许多研究人员选择使用通用编程语言(如 Python、Perl、R 或 Java)或 Unix 文本处理工具(如 sed 或 awk)对数据进行自发处理,从一种形式转换为另一种形式。幸运的是,pandas 与内置的 Python 语言功能一起,为您提供了一套高级、灵活和快速的工具,使您能够将数据转换为正确的形式。

      如果您发现在本书或 pandas 库中找不到的数据操作类型,请随时在 Python 邮件列表或 pandas GitHub 网站上分享您的用例。事实上,pandas 的设计和实现很大程度上是由真实应用程序的需求驱动的。

      在本章中,我讨论了有关缺失数据、重复数据、字符串操作和其他一些分析数据转换的工具。在下一章中,我将专注于以各种方式组合和重新排列数据集。

      缺失数据在许多数据分析应用中很常见。pandas 的目标之一是尽可能地使处理缺失数据变得轻松。例如,默认情况下,pandas 对象上的所有描述性统计都排除缺失数据。

      pandas 对象中表示缺失数据的方式有些不完美,但对于大多数真实世界的用途来说是足够的。对于数据类型,pandas 使用浮点值(Not a Number)表示缺失数据。

      我们称之为标记值:当存在时,表示缺失(或空)值:

      方法为我们提供一个布尔 Series,其中值为空时为:

      在 pandas 中,我们采用了 R 编程语言中使用的惯例,将缺失数据称为 NA,代表不可用。在统计应用中,NA 数据可能是不存在的数据,也可能是存在但未被观察到的数据(例如通过数据收集问题)。在清理数据进行分析时,通常重要的是对缺失数据本身进行分析,以识别数据收集问题或由缺失数据引起的数据潜在偏差。

      内置的 Python 值也被视为 NA:

      pandas 项目已经尝试使处理缺失数据在不同数据类型之间保持一致。像这样的函数抽象了许多烦人的细节。请参阅表 7.1 以获取与处理缺失数据相关的一些函数列表。

      表 7.1:NA 处理对象方法

      方法描述根据每个标签的值是否具有缺失数据来过滤轴标签,对于可以容忍多少缺失数据有不同的阈值。使用某个值或插值方法(如 或 )填充缺失数据。返回指示哪些值缺失/NA 的布尔值。 的否定,对于非 NA 值返回 ,对于 NA 值返回 。

      过滤缺失数据

      有几种过滤缺失数据的方法。虽然您始终可以选择使用 和布尔索引手动执行,但 可能会有所帮助。对于 Series,它返回仅具有非空数据和索引值的 Series:

      这与执行以下操作相同:

      对于 DataFrame 对象,有不同的方法可以删除缺失数据。您可能希望删除所有 NA 的行或列,或者仅删除包含任何 NA 的行或列。 默认情况下会删除包含缺失值的任何行:

      传递 将仅删除所有 NA 的行:

      请记住,这些函数默认情况下返回新对象,不会修改原始对象的内容。

      要以相同方式删除列,请传递 :

      假设您只想保留包含至多一定数量缺失观察的行。您可以使用 参数指示这一点:

      填充缺失数据

      与过滤缺失数据(并可能连同其他数据一起丢弃)不同,您可能希望以任意方式填补任意数量的“空洞”。对于大多数情况, 方法是要使用的主要函数。通过使用常量调用 可以用该值替换缺失值:

      通过字典调用 ,您可以为每列使用不同的填充值:

      可用于重新索引的相同插值方法(请参见 表 5.3)也可用于 :

      使用 ,您可以做很多其他事情,比如使用中位数或平均统计数据进行简单的数据填充:

      请参见 表 7.2 了解 函数参数的参考。

      表 7.2: 函数参数

      参数描述用于填充缺失值的标量值或类似字典的对象插值方法:可以是 (向后填充)或 (向前填充)之一;默认为 填充的轴( 或 );默认为 对于向前和向后填充,最大连续填充周期数

      到目前为止,在本章中,我们一直关注处理缺失数据。过滤、清理和其他转换是另一类重要操作。

      删除重复项

      DataFrame 中可能会出现重复行,原因有很多。这里是一个例子:

      DataFrame 方法 返回一个布尔 Series,指示每行是否为重复行(其列值与较早行中的值完全相等):

      相关地, 返回一个 DataFrame,其中过滤掉 数组为 的行:

      默认情况下,这两种方法都考虑所有列;或者,您可以指定任何子集来检测重复项。假设我们有一个额外的值列,并且只想基于 列过滤重复项:

      和 默认保留第一个观察到的值组合。传递 将返回最后一个:

      使用函数或映射转换数据

      对于许多数据集,您可能希望根据数组、Series 或 DataFrame 中的值执行一些基于值的转换。考虑收集的关于各种肉类的假设数据:

      假设您想要添加一个指示每种食物来自哪种动物的列。让我们写下每种不同肉类到动物种类的映射:

      Series 上的 方法(也在 Ch 5.2.5: 函数应用和映射 中讨论)接受一个包含映射的函数或类似字典的对象,用于对值进行转换:

      我们也可以传递一个执行所有工作的函数:

      使用 是执行逐元素转换和其他数据清理相关操作的便捷方式。

      替换值

      使用 方法填充缺失数据是更一般的值替换的特殊情况。正如您已经看到的, 可以用于修改对象中的一部分值,但 提供了一种更简单、更灵活的方法。让我们考虑这个 Series:

      值可能是缺失数据的标记值。要用 pandas 理解的 NA 值替换这些值,可以使用 ,生成一个新的 Series:

      如果您想一次替换多个值,可以传递一个列表,然后是替代值:

      要为每个值使用不同的替代值,传递一个替代列表:

      传递的参数也可以是一个字典:

      注意

      方法与 是不同的,后者执行逐元素的字符串替换。我们将在本章后面的 Series 中查看这些字符串方法。

      重命名轴索引

      与 Series 中的值类似,轴标签也可以通过函数或某种形式的映射进行类似转换,以生成新的、不同标记的对象。您还可以在原地修改轴,而不创建新的数据结构。这是一个简单的例子:

      与 Series 一样,轴索引具有 方法:

      您可以分配给 属性,直接修改 DataFrame:

      如果要创建一个转换后的数据集副本而不修改原始数据集,一个有用的方法是 :

      值得注意的是, 可以与类似字典的对象一起使用,为轴标签的子集提供新值:

      可以避免手动复制 DataFrame 并为其 和 属性分配新值的繁琐工作。

      离散化和分箱

      连续数据通常被离散化或以其他方式分成“箱子”进行分析。假设您有一组人的研究数据,并且想要将它们分成离散的年龄段:

      让我们将这些分成 18 至 25 岁、26 至 35 岁、36 至 60 岁,最后是 61 岁及以上的箱子。为此,您必须使用 :

      pandas 返回的对象是一个特殊的分类对象。您看到的输出描述了 计算的箱。每个箱由一个特殊的(对于 pandas 是唯一的)区间值类型标识,其中包含每个箱的下限和上限:

      请注意, 是 结果的箱计数。

      在区间的字符串表示中,括号表示一侧是 开放的(排除的),而方括号表示一侧是 闭合的(包含的)。您可以通过传递 来更改哪一侧是闭合的:

      通过将列表或数组传递给 选项,可以覆盖默认的基于区间的箱标签:

      如果将整数数量的箱传递给 而不是显式的箱边界,它将基于数据中的最小值和最大值计算等长的箱。考虑一下一些均匀分布的数据被分成四等份的情况:

      选项将小数精度限制为两位数。

      一个与之密切相关的函数 ,根据样本分位数对数据进行分箱。根据数据的分布,使用 通常不会导致每个箱具有相同数量的数据点。由于 使用样本分位数,因此您将获得大致相同大小的箱:

      类似于 ,您可以传递自己的分位数(介于 0 和 1 之间的数字):

      我们将在本章后面的聚合和分组操作讨论中再次回到和,因为这些离散化函数对于分位数和分组分析特别有用。

      检测和过滤异常值

      过滤或转换异常值主要是应用数组操作的问题。考虑一个包含一些正态分布数据的 DataFrame:

      假设您想要查找绝对值超过 3 的某一列中的值:

      要选择所有值超过 3 或-3 的行,您可以在布尔 DataFrame 上使用方法:

      在周围的括号是必要的,以便在比较操作的结果上调用方法。

      可以根据这些标准设置值。以下是将值限制在区间-3 到 3 之外的代码:

      语句根据中的值是正数还是负数产生 1 和-1 值:

      排列和随机抽样

      通过使用函数,可以对 Series 或 DataFrame 中的行进行排列(随机重新排序)。调用并传入您想要排列的轴的长度会产生一个整数数组,指示新的排序:

      然后可以将该数组用于基于的索引或等效的函数:

      通过使用调用,我们还可以选择列的排列:

      要选择一个不带替换的随机子集(同一行不能出现两次),可以在 Series 和 DataFrame 上使用方法:

      要生成一个带有替换的样本(允许重复选择),请将传递给:

      计算指示/虚拟变量

      另一种用于统计建模或机器学习应用的转换类型是将分类变量转换为虚拟或指示矩阵。如果 DataFrame 中的一列有个不同的值,您将得到一个包含所有 1 和 0 的列的矩阵或 DataFrame。pandas 有一个函数可以做到这一点,尽管您也可以自己设计一个。让我们考虑一个示例 DataFrame:

      在这里,我传递了以将输出类型从布尔值(pandas 较新版本中的默认值)更改为浮点数。

      在某些情况下,您可能希望在指示 DataFrame 的列中添加前缀,然后将其与其他数据合并。有一个用于执行此操作的前缀参数:

      方法将在下一章中详细解释。

      如果 DataFrame 中的一行属于多个类别,则我们必须使用不同的方法来创建虚拟变量。让我们看一下 MovieLens 1M 数据集,该数据集在 Ch 13:数据分析示例中有更详细的研究:

      pandas 实现了一个特殊的 Series 方法(以开头的方法将在字符串操作中更详细地讨论),处理了将多个组成员身份编码为分隔字符串的情况:

      然后,与之前一样,您可以将此与组合,同时在 DataFrame 的列名中添加,使用方法:

      注意

      对于更大的数据,使用这种构建具有多个成员身份的指示变量的方法并不特别快速wps office 官方下载地址是什么(wps下载电脑版免费官网)。最好编写一个直接写入 NumPy 数组的低级函数,然后将结果包装在 DataFrame 中。

      在统计应用中的一个有用的技巧是将与像这样的离散化函数结合使用:*

      我们稍后将再次查看,在为建模创建虚拟变量中。

      注意

      这是一个较新且更高级的主题,许多 pandas 用户不需要了解太多,但我在这里完整地介绍它,因为在接下来的章节中我将引用和使用扩展数据类型。

      pandas 最初是建立在 NumPy 的基础上的,NumPy 是一个主要用于处理数值数据的数组计算库。许多 pandas 概念,如缺失数据,是使用 NumPy 中可用的内容实现的,同时尽量在使用 NumPy 和 pandas 的库之间最大程度地保持兼容性。

      基于 NumPy 的构建存在许多缺点,例如:

      对于一些数值数据类型,如整数和布尔值,缺失数据处理是不完整的。因此,当这些数据中引入缺失数据时,pandas 会将数据类型转换为,并使用表示空值。这导致许多 pandas 算法中出现了微妙的问题。

      具有大量字符串数据的数据集在计算上是昂贵的,并且使用了大量内存。

      一些数据类型,如时间间隔、时间增量和带时区的时间戳,如果不使用计算昂贵的 Python 对象数组,将无法有效支持。

      最近,pandas 开发了一个扩展类型系统,允许添加新的数据类型,即使它们在 NumPy 中没有原生支持。这些新数据类型可以被视为与来自 NumPy 数组的数据同等重要。

      让我们看一个例子,我们创建一个带有缺失值的整数 Series:

      主要出于向后兼容的原因,Series 使用了使用数据类型和表示缺失值的传统行为。我们可以使用来创建这个 Series:

      输出表示扩展类型数组中的值缺失。这使用了特殊的标记值:

      我们也可以使用缩写来指定类型,而不是。大写是必需的,否则它将是一个基于 NumPy 的非扩展类型:

      pandas 还有一种专门用于字符串数据的扩展类型,不使用 NumPy 对象数组(需要安装 pyarrow 库):

      这些字符串数组通常使用更少的内存,并且在对大型数据集进行操作时通常更高效。

      另一个重要的扩展类型是,我们将在 Categorical Data 中更详细地讨论。截至本文撰写时,可用的扩展类型的相对完整列表在表 7.3 中。

      扩展类型可以传递给 Series 的方法,允许您在数据清理过程中轻松转换:

      表 7.3:pandas 扩展数据类型

      扩展类型描述可空布尔数据,传递字符串时使用分类数据类型,传递字符串时使用带时区的日期时间32 位可空浮点数,传递字符串时使用64 位可空浮点数,传递字符串时使用8 位可空有符号整数,传递字符串时使用16 位可空有符号整数,传递字符串时使用32 位可空有符号整数,传递字符串时使用64 位可空有符号整数,传递字符串时使用8 位可空无符号整数,传递字符串时使用16 位可空无符号整数,传递字符串时使用32 位可空无符号整数,传递字符串时使用

      | | 64 位可空无符号整数,在传递为字符串时使用 |

      Python 长期以来一直是一种流行的原始数据处理语言,部分原因是它易于用于字符串和文本处理。大多数文本操作都可以通过字符串对象的内置方法简化。对于更复杂的模式匹配和文本操作,可能需要使用正则表达式。pandas 通过使您能够简洁地在整个数据数组上应用字符串和正则表达式,另外处理了缺失数据的烦恼。

      Python 内置字符串对象方法

      在许多字符串处理和脚本应用程序中,内置字符串方法已经足够。例如,逗号分隔的字符串可以使用分割成多个部分:

      通常与结合使用以修剪空格(包括换行符):

      这些子字符串可以使用加法和双冒号分隔符连接在一起:

      但这并不是一种实用的通用方法。更快速和更符合 Python 风格的方法是将列表或元组传递给字符串上的方法:

      其他方法涉及定位子字符串。使用 Python 的关键字是检测子字符串的最佳方法,尽管也可以使用和:

      请注意,和之间的区别在于,如果未找到字符串,会引发异常(而不是返回-1):

      相关地,返回特定子字符串的出现次数:

      将一个模式的出现替换为另一个。通常也用于通过传递空字符串来删除模式:

      请参阅表 7.4 以获取 Python 的一些字符串方法列表。

      正则表达式也可以与许多这些操作一起使用,您将看到。

      表 7.4:Python 内置字符串方法

      方法描述返回字符串中子字符串的非重叠出现次数如果字符串以后缀结尾,则返回如果字符串以前缀开头,则返回用作分隔符将字符串用于连接其他字符串序列如果在字符串中找到传递的子字符串,则返回第一个出现的起始索引;否则,如果未找到,则引发返回字符串中第一个出现的子字符串的第一个字符的位置;类似于,但如果未找到则返回-1返回字符串中最后出现的子字符串的第一个字符的位置;如果未找到则返回-1用另一个字符串替换字符串的出现修剪空格,包括右侧、左侧或两侧的换行符使用传递的分隔符将字符串拆分为子字符串列表将字母字符转换为小写将字母字符转换为大写将字符转换为小写,并将任何区域特定的可变字符组合转换为一个通用的可比较形式分别左对齐或右对齐;用空格(或其他填充字符)填充字符串的对侧,以返回具有最小宽度的字符串

      正则表达式

      正则表达式提供了一种灵活的方式来在文本中搜索或匹配(通常更复杂的)字符串模式。单个表达式,通常称为regex,是根据正则表达式语言形成的字符串。Python 的内置模块负责将正则表达式应用于字符串;我将在这里给出一些示例。

      注意

      编写正则表达式的艺术可能是一个单独的章节,因此超出了本书的范围。互联网和其他书籍上有许多优秀的教程和参考资料。

      模块的函数分为三类:模式匹配、替换和拆分。当然,这些都是相关的;正则表达式描述了要在文本中定位的模式,然后可以用于许多目的。让我们看一个简单的例子:假设我们想要使用可变数量的空白字符(制表符、空格和换行符)来拆分字符串。

      描述一个或多个空白字符的正则表达式是 :

      当您调用 时,正则表达式首先被 编译,然后在传递的文本上调用其 方法。您可以使用 自己编译正则表达式,形成一个可重用的正则表达式对象:

      如果您想要获取与正则表达式匹配的所有模式的列表,可以使用 方法:

      注意

      为了避免在正则表达式中使用 进行不必要的转义,请使用 原始 字符串字面量,如 ,而不是等效的 。

      如果您打算将相同的表达式应用于许多字符串,强烈建议使用 创建一个正则表达式对象;这样可以节省 CPU 周期。

      和 与 密切相关。虽然 返回字符串中的所有匹配项,但 只返回第一个匹配项。更严格地说, 仅 在字符串开头匹配。作为一个不太琐碎的例子,让我们考虑一个文本块和一个能够识别大多数电子邮件地址的正则表达式:

      在文本上使用 会产生一个电子邮件地址列表:

      为文本中的第一个电子邮件地址返回一个特殊的匹配对象。对于前面的正则表达式,匹配对象只能告诉我们模式在字符串中的起始和结束位置:

      返回 ,因为它只会匹配如果模式出现在字符串的开头时:

      相关地, 将返回一个新字符串,其中模式的出现被新字符串替换:

      假设您想要查找电子邮件地址,并同时将每个地址分成三个组件:用户名、域名和域后缀。为此,请在模式的部分周围加上括号以进行分段:

      由此修改后的正则表达式生成的匹配对象将使用其 方法返回模式组件的元组:

      当模式有组时, 返回一个元组列表:

      还可以使用特殊符号如 和 访问每个匹配中的组。符号 对应于第一个匹配组, 对应于第二个,依此类推:

      Python 中的正则表达式还有很多内容,其中大部分超出了本书的范围。表 7.5 提供了一个简要总结。

      表 7.5:正则表达式方法

      方法描述返回字符串中所有非重叠匹配模式的列表类似于 ,但返回一个迭代器在字符串开头匹配模式,并可选择将模式组件分段;如果模式匹配,则返回一个匹配对象,否则返回 扫描字符串以查找与模式匹配的内容,如果匹配,则返回一个匹配对象;与 不同,匹配可以出现在字符串的任何位置,而不仅仅是在开头在每次模式出现时将字符串分割成片段

      | | 用替换表达式替换字符串中所有 () 或前 次出现 () 的模式;使用符号 来引用替换字符串中的匹配组元素 |

      pandas 中的字符串函数

      清理混乱的数据集以进行分析通常需要大量的字符串操作。为了使事情更加复杂,包含字符串的列有时会有缺失数据:

      可以将字符串和正则表达式方法应用于每个值(传递 或其他函数)使用 ,但它将在 NA(空值)上失败。为了应对这一情况,Series 具有面向数组的字符串操作方法,可以跳过并传播 NA 值。这些方法通过 Series 的 属性访问;例如,我们可以使用 检查每个电子邮件地址中是否包含 :

      请注意,此操作的结果具有 类型。pandas 具有提供对字符串、整数和布尔数据进行专门处理的扩展类型,这些类型在处理缺失数据时一直存在一些问题:

      更详细地讨论了扩展类型,请参阅扩展数据类型。

      也可以使用正则表达式,以及任何 选项,如 :

      有几种进行矢量化元素检索的方法。可以使用 或索引到 属性:

      您也可以使用以下语法对字符串进行切片:

      方法将返回正则表达式的捕获组作为 DataFrame:

      查看更多 pandas 字符串方法,请参阅表 7.6。

      表 7.6: Series 字符串方法的部分列表

      方法描述逐元素连接字符串,可选分隔符如果每个字符串包含模式/正则表达式,则返回布尔数组计算模式的出现次数使用具有组的正则表达式从字符串 Series 中提取一个或多个字符串;结果将是一个每组一列的 DataFrame对每个元素等同于 对每个元素等同于 计算每个字符串的模式/正则表达式的所有出现的列表索引到每个元素(检索第 i 个元素)等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 使用传递的分隔符连接 Series 中每个元素的字符串计算每个字符串的长度转换大小写;对每个元素等同于 或 对每个元素使用传递的正则表达式的 ,返回是否匹配的 或 在字符串的左侧、右侧或两侧添加空格等同于 复制值(例如, 相当于对每个字符串执行 )用其他字符串替换模式/正则表达式的出现对 Series 中的每个字符串进行切片按分隔符或正则表达式拆分字符串从两侧修剪空白,包括换行符修剪右侧的空白

      | | 修剪左侧的空白 |

      本节介绍了 pandas 的 类型。我将展示如何通过使用它在某些 pandas 操作中实现更好的性能和内存使用。我还介绍了一些工具,这些工具可能有助于在统计和机器学习应用中使用分类数据。

      背景和动机

      通常,表中的一列可能包含较小一组不同值的重复实例。我们已经看到了像 和 这样的函数,它们使我们能够从数组中提取不同的值并分别计算它们的频率:

      许多数据系统(用于数据仓库、统计计算或其他用途)已经开发了专门的方法来表示具有重复值的数据,以实现更高效的存储和计算。在数据仓库中,最佳实践是使用所谓的维度表,其中包含不同的值,并将主要观察结果存储为引用维度表的整数键:

      我们可以使用方法恢复原始的字符串 Series:

      这种整数表示被称为分类或字典编码表示。不同值的数组可以称为数据的类别、字典或级别。在本书中,我们将使用术语分类和类别。引用类别的整数值称为类别代码或简称代码。

      在进行分析时,分类表示可以显著提高性能。您还可以在保持代码不变的情况下对类别执行转换。一些可以以相对较低的成本进行的示例转换包括:

      重命名类别

      追加一个新类别而不改变现有类别的顺序或位置

      pandas 中的分类扩展类型

      pandas 具有专门的扩展类型,用于保存使用基于整数的分类表示或编码的数据。这是一种流行的数据压缩技术,适用于具有许多相似值出现的数据,并且可以提供更快的性能和更低的内存使用,特别是对于字符串数据。

      让我们考虑之前的示例 Series:

      这里,是 Python 字符串对象的数组。我们可以通过调用以下方式将其转换为分类:

      现在,的值是的一个实例,您可以通过属性访问:

      对象具有和属性:

      可以使用访问器更轻松地访问这些,这将在 Categorical Methods 中很快解释。

      获取代码和类别之间的映射的一个有用技巧是:

      您可以通过分配转换后的结果将 DataFrame 列转换为分类:

      您还可以直接从其他类型的 Python 序列创建:

      如果您从另一个来源获得了分类编码数据,可以使用替代的构造函数:

      除非明确指定,分类转换假定类别没有特定的排序。因此,数组的顺序可能会根据输入数据的顺序而有所不同。在使用或任何其他构造函数时,您可以指示类别具有有意义的排序:

      输出表示在排序中位于之前,依此类推。无序的分类实例可以通过变为有序:

      最后一点,分类数据不一定是字符串,尽管我只展示了字符串示例。分类数组可以由任何不可变的值类型组成。

      使用 Categoricals 进行计算

      与非编码版本(如字符串数组)相比,在 pandas 中使用通常表现相同。在处理分类数据时,pandas 的某些部分,如函数,表现更好。还有一些函数可以利用标志。

      让我们考虑一些随机数值数据,并使用分箱函数。这将返回;我们在本书的早期使用了,但忽略了分类的工作原理的细节:

      让我们计算一下这些数据的四分位数分箱,并提取一些统计数据:

      尽管有用,确切的样本四分位数可能不如四分位数名称有用于生成报告。我们可以通过的参数实现这一点:

      标记的分类不包含数据中的箱边信息,因此我们可以使用来提取一些摘要统计信息:

      结果中的列保留了来自的原始分类信息,包括排序:

      分类数据的更好性能

      在本节开头,我说过分类类型可以提高性能和内存使用,所以让我们看一些例子。考虑一些具有 1000 万个元素和少量不同类别的 Series:

      现在我们将转换为分类:

      现在我们注意到使用的内存比要多得多:

      当然,转换为类别并不是免费的,但这是一次性的成本:

      由于底层算法使用基于整数的代码数组而不是字符串数组,因此使用分类的 GroupBy 操作可以显着提高性能。这里我们比较了使用 GroupBy 机制的的性能:

      分类方法

      包含分类数据的 Series 具有几个类似于专门的字符串方法的特殊方法。这也提供了方便访问类别和代码。考虑 Series:

      特殊的访问器属性提供了对分类方法的访问:

      假设我们知道此数据的实际类别集扩展到数据中观察到的四个值之外。我们可以使用方法来更改它们:

      虽然数据看起来没有改变,但使用它们的操作将反映新的类别。例如,如果存在,会尊重类别:

      在大型数据集中,分类通常被用作一种方便的工具,用于节省内存和提高性能。在过滤大型 DataFrame 或 Series 之后,许多类别可能不会出现在数据中。为了帮助解决这个问题,我们可以使用方法来修剪未观察到的类别:

      请参见表 7.7 列出的可用分类方法。

      表 7.7:pandas 中 Series 的分类方法

      方法描述在现有类别的末尾追加新的(未使用的)类别使类别有序使类别无序删除类别,将任何删除的值设置为 null删除数据中不存在的任何类别值用指定的新类别名称集替换类别;不能改变类别数量表现类似于,但也可以改变结果为有序类别用指定的新类别集替换类别;可以添加或删除类别

      为建模创建虚拟变量

      当您使用统计或机器学习工具时,通常会将分类数据转换为虚拟变量,也称为独热编码。这涉及创建一个 DataFrame,其中每个不同的类别都有一列;这些列包含给定类别的出现为 1,否则为 0。

      考虑前面的例子:

      如本章前面提到的,函数将这个一维分类数据转换为包含虚拟变量的 DataFrame:

      有效的数据准备可以通过使您花更多时间分析数据而不是准备分析数据来显着提高生产率。本章中我们探讨了许多工具,但这里的覆盖范围并不全面。在下一章中,我们将探讨 pandas 的连接和分组功能。