推荐书: Python开发最佳实践

pandas1.0新功能试用

微博@mlln-cn, 并附上文章url链接, 我就能回答你的问题奥!

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
2
$ python --version
Python 3.6.5

从旧版本升级到1.0

升级pandas要小心, 尤其是对一些重度用户, 因为这次升级可能会导致之前的代码不能运行, 如果你的代码很重要, 就不要轻易升级, 或者你可以使用虚拟环境给新版本创建一个全新的运行环境, 需要旧版本的时候可以自由切换版本环境。

我们直接使用pip命令就能升级pandas, 方法如下:

1
pip install --upgrade pandas==1.0

安装完了以后你就可以查看一下你的pandas版本了:

1
2
import pandas as pd
pd.__version__
输出(plain):
'1.0.0'

新特性:DataFrame.info升级

info方法的可读性进一步提高, 大大提高我们查看数据的体验:

1
2
3
4
5
df = pd.DataFrame({
'A': [1,2,3],
'B': ["goodbye", "cruel", "world"],
'C': [False, True, False]
})
1
df.info()
输出(stream):
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 bool dtypes: bool(1), int64(1), object(1) memory usage: 179.0+ bytes

新特性:支持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()
输出(plain):
'| | 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
2
3
sser = pd.Series('hello,world,!'.split(','), dtype='string')

sser.dtype
输出(plain):
StringDtype
1
2
df['B'] = df['B'].astype("string")
df.dtypes
输出(plain):
A int64
B string
C bool
dtype: object

有这个格式以后, 我们可以快速筛选出string格式的列:

1
df.select_dtypes('string')
输出(html):
B
0 goodbye
1 cruel
2 world

新特性: 布尔数据格式

1
2
3
bser = pd.Series([1,1,0], dtype='boolean')

bser.dtype
输出(plain):
BooleanDtype
1
2
3
df['D'] = bser

df.dtypes
输出(plain):
A int64
B string
C bool
D boolean
dtype: object

新特性:pd.NA

在pandas0.25中, 我们可以使用numpy.nanNone以及pd.NaT来表示缺失值, 这造成一些困难。比如一列数据都是整数, 但是有一个数字缺失, 用numpy.nan代填, 那么这列数据的数据格式就不得不转换成浮点数, 下面是一个例子:

1
2
3
4
import numpy as np

ser = pd.Series([1,2,3], dtype='int')
ser
输出(plain):
0 1
1 2
2 3
dtype: int32
1
2
3
ser[0] = np.nan

ser
输出(plain):
0 NaN
1 2.0
2 3.0
dtype: float64

这种不符合常识的行为会造成很多困扰, 所以现在我们可以这样设置缺失值:

1
2
3
4
ser2 = pd.Series([1,2,3], dtype='int')

ser2[0] = pd.NA
ser2
输出(plain):
0
1 2
2 3
dtype: object

虽然ser2的数据格式仍然改变了, 变成了object类型, 但是里面的整数数字没有更改, 还是整数, 这更符合我们的意愿。

注意
本文由jupyter notebook转换而来, 您可以在这里下载notebook
有问题可以直接在下方留言
或者给我发邮件675495787[at]qq.com
请记住我的网址: mlln.cn 或者 jupyter.cn

赞助

持续创造有价值的内容, 我需要你的帮助