
正文
(数据科学学习手札73)盘点pandas 1.0.0中的新特性
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
本文对应脚本及数据已上传至我的
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),其包含两列
V1
和
V2
,且
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()输出
新版本的
pandas
对
DataFrame.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
以上就是本文的全部内容,如有笔误望指出!







