本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  毫无疑问pandas已经成为基于Python的数据分析领域最重要的包,而就在最近,pandas终于迎来了1.0.0版本,对于pandas来说这是一次更新是里程碑式的,删除了很多旧版本中臃肿的功能,新增了一些崭新的特性,更加专注于高效实用的数据分析,本文就将针对pandas 1.0.0在笔者眼中比较重要的特性进行介绍,对于想要完整彻底了解新版本特性的朋友可以直接去看官方文档。

图1

2 pandas 1.0.0中的新特性

  由于1.0.0并不作为正式版发布,因此要安装它需要指定版本(请注意,pandas 1.0.0目前只支持Python 3.6.1及以上版本):

pip install --upgrade pandas==1.0.0rc0

  成功安装后,让我们来体验一下全新版本的pandas给我们带来了哪些令人兴奋的功能吧。

2.1 新增StringDtype数据类型

  一直以来,pandas中的字符串类型都是用object来存储的,这次更新带来的新的更有针对性的StringDtye主要是为了解决如下问题:

  object类型对于字符串与非字符串混合的数据无差别的统一存储为一个类型,而现在的StringDtype则只允许存储字符串对象

  我们通过下面的例子更好的理解这个新特性,首先我们在excel中创建如下的表格(图2),其包含两列V1V2,且V1中的元素并不是纯粹的字符串,混杂了数字,而V2则为纯粹的字符串列:

图2

  在jupyter lab中我们首先读入该数据并查看其具体信息:

# 读入StringDtype_test.xlsx并查看其具体信息
StringDtype_test = pd.read_excel('StringDtype test.xlsx')
StringDtype_test.info()

图3

  可以看到在数据读入阶段两列都被当作object型,接下来我们使用astype方法分别对两列强制转换类型为string,看看在我们的新版本中会发生什么(注意,在1.0.0版本中StringDtype的简称为string):

# 对V1进行强制类型
StringDtype_test['V1'].astype('string')

图4

  可以看到,运行这段代码后抛出了对应的错误,因为StringDtype只允许字符串出现,包含数字1的V1便被拒绝转换为string型,而对于V2

# 对V2进行强制类型
StringDtype_test['V2'].astype('string')

图5

  则正常完成了数据类型的转换,而pandas中丰富的字符串方法对新的string同样适用,譬如英文字母大写化:

StringDtype_test['V2'].astype('string').str.upper()

图6

2.2 markdown表格导出

  在新版本的pandas中新增了一个很有意思的方法to_markdown(),通过它我们可以将表格导出为markdown格式,下面是一个例子:

df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])
# 导出为markdown表格字符串
print(df.to_markdown())

图7

  下面的表格就是我直接将图7中打印出的markdown格式表格放到编辑器中再修改了表格居中的效果,只要你的编辑器支持markdown格式,就可以这样方便地生成表格:

A B
a 1 1
a 2 2
b 3 3

2.3 新增ignore_index参数

  我们在过去版本对DataFrame或Series按列使用sort_values()、按index使用sort_index()排序或使用drop_duplicates()去除数据框中的重复值时,经常会发现处理后的结果index随着排序或行的删除而被打乱,在index无意义时我们需要使用reset_index()方法对结果的index进行重置,而在新版本的pandas中,为sort_values()sort_index()以及drop_duplicates()引入了新参数ignore_index(),这是一个bool型变量,默认值为False,当被设置为True时,排序后结果的index会被自动重置:

df = pd.DataFrame({
'V1': [_ for _ in range(5)],
})
# ignore_index设置为False
df.sort_values(by='V1', ignore_index=False, ascending=False)

  这时因为ignore_index参数设置为False,排序后的结果index未被重置:

图8

  接下来设置ignore_index参数为True:

# ignore_index设置为True
df.sort_values(by='V1', ignore_index=True, ascending=False)

  这时返回的结果就已经被重置了index:

图9

  sort_index()drop_duplicates()效果同上,不重复展示。

2.4 美化info()输出

  新版本的pandasDataFrame.info()输出内容进行了美化,增强了使用体验:

df = pd.DataFrame({"int_col": [1, 2, 3],
"text_col": ["a", "b", "c"],
"float_col": [0.0, 0.1, 0.2]})
df.info()

图10

  还有很多更新内容,比如为rolling.apply()新增了参数engine,以使用numba后端极大提升numpy相关运算速度等,这里就不再赘述,感兴趣的读者可以前往 https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html

  以上就是本文的全部内容,如有笔误望指出!

(数据科学学习手札73)盘点pandas 1.0.0中的新特性的更多相关文章

  1. (数据科学学习手札131)pandas中的常用字符串处理方法总结

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...

  2. (数据科学学习手札124)pandas 1.3版本主要更新内容一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,pandas发布了其1.3版本 ...

  3. (数据科学学习手札52)pandas中的ExcelWriter和ExcelFile

    一.简介 pandas中的ExcelFile()和ExcelWriter(),是pandas中对excel表格文件进行读写相关操作非常方便快捷的类,尤其是在对含有多个sheet的excel文件进行操控 ...

  4. (数据科学学习手札68)pandas中的categorical类型及应用

    一.简介 categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别.血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内 ...

  5. (数据科学学习手札57)用ggplotly()美化ggplot2图像

    一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非 ...

  6. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  7. (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线

    1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改 ...

  8. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  9. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

随机推荐

  1. PowerShell 通过 WMI 获取系统安装的驱动

    本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序 通过下面代码可以获取用户已经安装的驱动程序 Get-WmiObject Win32_SystemDriver | Format-List Ca ...

  2. Realm 配置

    快速入门 本文档介绍了如何借助一个“数据库”来配置 Tomcat ,从而实现容器管理安全性.所要连接的这种数据库含有用户名.密码以及用户角色.你只需知道的是,如果使用的 Web 应用含有一个或多个 & ...

  3. Struts2和Spring集成

    Spring是一个流行的Web框架,它提供易于集成与很多常见的网络任务.所以,问题是,为什么我们需要Spring,当我们有Struts2?Spring是超过一个MVC框架 - 它提供了许多其它好用的东 ...

  4. 在linux下find和grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...

  5. 更新到@vue/cli 4.1.1版本的前端开发前的准备

    一.概念简述 1.node.js目的是提供一个JS的运行环境. 2.npm(node package manager)是一个JS包管理器. 二.检查自己的电脑是否已安装相关配置 1.查看node.js ...

  6. 22.json&pickle&shelve

    转载:https://www.cnblogs.com/yuanchenqi/article/5732581.html json 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  7. python 处理xml文件

    需求 在实际应用中,需要对xml配置文件进行实时修改, 1.增加.删除 某些节点 2.增加,删除,修改某个节点下的某些属性 3.增加,删除,修改某些节点的文本 <annotation> & ...

  8. 使用宝塔搭建nextcloud的过程(搭建、优化、问题)

    宝塔部署教程 参考网址: 使用NextCloud来搭建我们的私有网盘.并结合Redis优化性能(宝塔) https://www.moerats.com/archives/175/ 宝塔面板下nextc ...

  9. 1024 科学计数法 (20 分)C与Java

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...

  10. js菜单栏切换

    先来看看需要实现的需求: 这是某购物网站上经常看到的效果 我们把网页的模型抽象出来,下面是我实现的效果图: 源代码仅供大家参考,具体如下: <!DOCTYPE html> <html ...