python最著名的数据科学工具包pandas正式发布了1.0版本, 这是一个里程碑, 我们都知道软件版本从0.x到1.x的升级就说明该软件基本成熟, 各项功能基本稳定了, 为了纪念这个升级, 我在这里介绍一下pandas1.0有哪些新功能。
新功能的介绍在这里:https://dev.pandas.io/docs/whatsnew/v1.0.0.html , 英文好的可以自行前往。
安装环境
pandas1.0不在支持python2.x, 因此为了能够安装pandas1.0, 你需要使用python3, 那么怎么查看你的python版本呢:
1 | $ python --version |
从旧版本升级到1.0
升级pandas要小心, 尤其是对一些重度用户, 因为这次升级可能会导致之前的代码不能运行, 如果你的代码很重要, 就不要轻易升级, 或者你可以使用虚拟环境给新版本创建一个全新的运行环境, 需要旧版本的时候可以自由切换版本环境。
我们直接使用pip命令就能升级pandas, 方法如下:
1 | pip install --upgrade pandas==1.0 |
安装完了以后你就可以查看一下你的pandas版本了:
1 | import pandas as pd |
'1.0.0'
新特性:DataFrame.info升级
info方法的可读性进一步提高, 大大提高我们查看数据的体验:
1 | df = pd.DataFrame({ |
1 | df.info() |
新特性:支持markdown格式的表格
程序员经常使用markdown写文章, 那么DataFrame支持markdown输出以后, 我们可以方便的输出表格数据, 并且粘贴到自己的博客上:
1 | df.to_markdown() |
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-4-5196b8168295> in <module>
----> 1 df.to_markdown()
d:\venv\.common\lib\site-packages\pandas\core\frame.py in to_markdown(self, buf, mode, **kwargs)
2015 kwargs.setdefault("headers", "keys")
2016 kwargs.setdefault("tablefmt", "pipe")
-> 2017 tabulate = import_optional_dependency("tabulate")
2018 result = tabulate.tabulate(self, **kwargs)
2019 if buf is None:
d:\venv\.common\lib\site-packages\pandas\compat\_optional.py in import_optional_dependency(name, extra, raise_on_missing, on_version)
90 except ImportError:
91 if raise_on_missing:
---> 92 raise ImportError(msg) from None
93 else:
94 return None
ImportError: Missing optional dependency 'tabulate'. Use pip or conda to install tabulate.
上面的程序运行报错了, 因为我们缺少了一个生成markdown代码的依赖包, 只要安装上它就行:
1 | !pip install tabulate |
1 | df.to_markdown() |
'| | A | B | C |\n|---:|----:|:--------|:------|\n| 0 | 1 | goodbye | False |\n| 1 | 2 | cruel | True |\n| 2 | 3 | world | False |'
新特性:string数据格式
以前, 字符串格式的数据在pandas中使用的数据格式是”object”, 现在pandas新增了string格式的数据, 下面我们创建一个字符串格式的Series:
1 | sser = pd.Series('hello,world,!'.split(','), dtype='string') |
StringDtype
1 | df['B'] = df['B'].astype("string") |
A int64
B string
C bool
dtype: object
有这个格式以后, 我们可以快速筛选出string格式的列:
1 | df.select_dtypes('string') |
B | |
---|---|
0 | goodbye |
1 | cruel |
2 | world |
新特性: 布尔数据格式
1 | bser = pd.Series([1,1,0], dtype='boolean') |
BooleanDtype
1 | df['D'] = bser |
A int64
B string
C bool
D boolean
dtype: object
新特性:pd.NA
在pandas0.25中, 我们可以使用numpy.nan
和None
以及pd.NaT
来表示缺失值, 这造成一些困难。比如一列数据都是整数, 但是有一个数字缺失, 用numpy.nan
代填, 那么这列数据的数据格式就不得不转换成浮点数, 下面是一个例子:
1 | import numpy as np |
0 1
1 2
2 3
dtype: int32
1 | ser[0] = np.nan |
0 NaN
1 2.0
2 3.0
dtype: float64
这种不符合常识的行为会造成很多困扰, 所以现在我们可以这样设置缺失值:
1 | ser2 = pd.Series([1,2,3], dtype='int') |
0
1 2
2 3
dtype: object
虽然ser2的数据格式仍然改变了, 变成了object类型, 但是里面的整数数字没有更改, 还是整数, 这更符合我们的意愿。
注意
本文由jupyter notebook转换而来, 您可以在这里下载notebook
统计咨询请加QQ 2726725926, 微信 mllncn, SPSS统计咨询是收费的
微博上@mlln-cn可以向我免费题问
请记住我的网址: mlln.cn 或者 jupyter.cn