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

选自Medium
作者:Tom Waterman
机器之心编译
参与:李诗萌、魔王
2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 数据科学家 Tom Waterman 撰文概述了其新功能。本文助你轻松玩转 Pandas 1.0。
图片
常用数据科学库 Pandas 刚刚年满十二岁,现在已经发布到 1.0.0 版。首个 Pandas 1.0 候选版本显示出,现在的 Pandas 在遇到缺失值时会接收一个新的标量,遵循语义化版本控制(Semantic Versioning)形成了新的弃用策略,网站也经过了重新设计……
注意:Pandas 1.0.0rc 版本于 2020 年 1 月 9 日发布,之前的版本是 0.25。
最新发布的 Pandas 版本包含许多优秀功能,如更好地自动汇总数据帧、更多输出格式、新的数据类型,甚至还有新的文档站点。
完整的版本说明参见:https://dev.pandas.io/docs/whatsnew/v1.0.0.html
本文将用较通俗的方式介绍 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__
1.0.0rc0
使用 DataFrame.info 更好地自动汇总数据帧
我最喜欢的新功能是改进后的 DataFrame.info (http://dataframe.info/) 方法。它使用一种可读性更强的格式,让数据探索过程变得更加容易。
>>> df = pd.DataFrame({
...: 'A': [1,2,3],
...: 'B': ["goodbye", "cruel", "world"],
...: 'C': [False, True, False]
...:})
>>> df.info()
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()
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")
在此之前,你只能通过指定名称来选择字符串类型列。
更多有关新数据类型的说明,参见:https://dev.pandas.io/docs/user_guide/text.html?highlight=string。
弃用
新版本弃用了许多功能。不过最值得注意的是,从 DataFrameGroupBy 对象中选择列时,输入 key 列表或 key 元组的方法已被弃用。现在要用 item 列表,而非键列表。
另一个最常用的变动出现在 DataFrame.hist() 和 Series.his() 中。现在 figsize 没有默认值,要想指定绘图的大小,需要输入元组。
Bug 修复
新版本还修复了大量 bug,提高了数据分析的可信度。
此前,在遇到分类数据以外的值时,fillna() 会引发 ValueError。因此,它现在纳入 assert 来测试不一致,并处理异常。
另外,在将分类数据转换为整数时,也会产生错误的输出。特别是对于 NaN 值,其输出往往是错误的。因此,新版 Pandas 修复了这个 bug。
原文链接:https://towardsdatascience.com/top-features-of-pandas-1-0-26abff08d1b6
本文为机器之心编译,转载请联系本公众号获得授权。
------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:content@jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com