纯净、安全、绿色的下载网站

首页

当前位置:首页IT学院IT技术

(数据科学学习手札73)盘点pandas 1.0.0中的新特性

费弗里   2020-01-22 我要评论

本文对应脚本及数据已上传至我的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
  以上就是本文的全部内容如有笔误望指出!


相关文章

猜您喜欢

网友评论

Copyright 2022 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们