机器之心
首发于机器之心
读完本文,轻松玩转数据处理利器Pandas 1.0

读完本文,轻松玩转数据处理利器Pandas 1.0

2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 数据科学家 Tom Waterman 撰文概述了其新功能。本文助你轻松玩转 Pandas 1.0。

选自Medium,作者:Tom Waterman,机器之心编译,参与:李诗萌、魔王。

常用数据科学库 Pandas 刚刚年满十二岁,现在已经发布到 1.0.0 版。首个 Pandas 1.0 候选版本显示出,现在的 Pandas 在遇到缺失值时会接收一个新的标量,遵循语义化版本控制(Semantic Versioning)形成了新的弃用策略,网站也经过了重新设计……

注意:Pandas 1.0.0rc 版本于 2020 年 1 月 9 日发布,之前的版本是 0.25。

最新发布的 Pandas 版本包含许多优秀功能,如更好地自动汇总数据帧、更多输出格式、新的数据类型,甚至还有新的文档站点。

完整的版本说明参见:dev.pandas.io/docs/what

本文将用较通俗的方式介绍 Pandas 新版本,希望对大家有所帮助。

要使用新版 Pandas,用户可以用 pip 轻松升级。截至本文撰写时,Pandas 1.0 仍是候选版本,这意味着安装时需要明确指定版本号。

pip install --upgrade pandas==1.0.0rc0

当然,升级可能会破坏部分代码,因为这次发布的是主要版本,所以请务必小心。

这一版 Pandas 也不再支持 Python 2。要使用 1.0+版本的 Pandas,至少需要 Python 3.6+版本,所以请确认 pip 和 python 的版本是正确的。

$ pip --version
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)$ python --version
Python 3.7.5

你可以根据下列代码确认一切正常,以及 Pandas 的版本正确。

>>> import pandas as pd
>>> pd.__version__

使用 DataFrame.info 更好地自动汇总数据帧

我最喜欢的新功能是改进后的 DataFrame.info (dataframe.info/) 方法。它使用一种可读性更强的格式,让数据探索过程变得更加容易。

>>> df = pd.DataFrame({
...:   'A': [1,2,3], 
...:   'B': ["goodbye", "cruel", "world"], 
...:   'C': [False, True, False]
...:})
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       3 non-null      int64
 1   B       3 non-null      object
 2   C       3 non-null      object
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes

支持 Markdown 表格作为输出格式

我第二喜欢的功能是用 DataFrame.to_markdown 方法,把数据帧导出到 Markdown 表格中。

>>> df.to_markdown()
|    |   A | B       | C     |
|---:|----:|:--------|:------|
|  0 |   1 | goodbye | False |
|  1 |   2 | cruel   | True  |
|  2 |   3 | world   | False |

这样可以通过 GitHub Gist,在 Medium 等处更容易地展示数据。

新数据类型:布尔值和字符串

Pandas 1.0 还实验性地引入了新的数据类型:布尔值和字符串。

由于这些改变是实验性的,因此数据类型的 API 可能会有轻微的变动,所以用户在使用时务必谨慎操作。不过,Pandas 推荐用户合理使用这些数据类型,在未来的版本中也将改善特定类型运算的性能,比如正则表达式匹配(Regex Match)。

默认情况下,Pandas 不会自动将你的数据强制转换为这些类型。但你可以修改参数来使用新的数据类型。

>>> B = pd.Series(["goodbye", "cruel", "world"], dtype="string")
>>> C = pd.Series([False, True, False], dtype="bool")
>>> df.B = B, df.C = C
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       3 non-null      int64
 1   B       3 non-null      string
 2   C       3 non-null      bool
dtypes: int64(1), object(1), string(1)
memory usage: 200.0+ bytes

注意现在的 Dtype 列是如何反映新数据类型 string 和 bool 的。

字符串数据类型最大的用处是,你可以从数据帧中只选择字符串列,这样就可以更快地分析数据集中的文本。

df.select_dtypes("string")

在此之前,你只能通过指定名称来选择字符串类型列。

更多有关新数据类型的说明,参见:dev.pandas.io/docs/user

弃用

新版本弃用了许多功能。不过最值得注意的是,从 DataFrameGroupBy 对象中选择列时,输入 key 列表或 key 元组的方法已被弃用。现在要用 item 列表,而非键列表。

另一个最常用的变动出现在 DataFrame.hist() 和 Series.his() 中。现在 figsize 没有默认值,要想指定绘图的大小,需要输入元组。

Bug 修复

新版本还修复了大量 bug,提高了数据分析的可信度。

此前,在遇到分类数据以外的值时,fillna() 会引发 ValueError。因此,它现在纳入 assert 来测试不一致,并处理异常。

另外,在将分类数据转换为整数时,也会产生错误的输出。特别是对于 NaN 值,其输出往往是错误的。因此,新版 Pandas 修复了这个 bug。

原文链接:towardsdatascience.com/

发布于 2020-01-23

文章被以下专栏收录