我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pandas 0.24发布,将放弃Python 2

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pandas 0.24发布,将放弃Python 2

Pandas 0.24发布,将放弃Python 2

很多Pythoner应该早就知道,Python核心团队将在2020年1月1日停止支持Python 2.7。

我们也看到了用于Python数据分析的各种神器也陆续公布了取消支持Python 2.7的计划。IPython是首批放弃对Python 2支持的工具之一,紧随其后的是Matplotlib和最近的NumPy。其他流行的库,如scikit-learn和SciPy,也将取消对Python 2的支持。

2019年1月25日,Pandas发布了0.24.0版本,在对Python 2.7的取消支持的计划里,提到了从0.24开始,所有的新功能将不在支持Python 2.7,全面转向只对Python 3的支持。

可以感觉到,从2019年开始,很多的Python包即将全面支持Python 3,请各位Python 初学者在选择Python版本的时候,各位Python老程序员依然还在考虑是否继续使用Python 2的时候,各位手里掌控了Python包目前只支持Python 2.7的并有不少用户的朋友,可以死心塌地的转向Python 3了。

Tushare SDK在很早前就同时支持Python 2和3,所以并不存在版本的问题,未来在发布新工具的时候,也会转向Python 3版本。

Pandas 0.24的变化

提升依赖包版本

Pandas 0.24对各依赖包的最低版本进行了调整,提升了一些版本号,我们可以从以下表格中查看到各依赖包的最低版本要求。

Pandas 0.24发布,将放弃Python 2

其实用户并不需要专门考虑各种依赖包的版本问题,不管是新安装也好,手动升级Pandas版本也好,安装程序会自行升级依赖包的版本。

但是,如果用户对这些依赖包的版本有特定要求的时候,请谨慎升级。

重要新增功能介绍

0.24版本做了一些功能增强,这里只介绍增加的几个新接口。

1、创建数组的新方法

新版本添加了一个新的顶级方法array()来创建一维数组,可用于创建任意扩展,扩展数组是从0.23版本开始的一个概念,用于实现扩展 NumPy类型系统的数据类型和数组。用兴趣的用户,可以查询pandas官网获得更多信息。


In [1]: pd.array([1, 2, np.nan], dtype='Int64')
Out[2]: 
<IntegerArray>
[1, 2, NaN]
Length: 3, dtype: Int64

In [2]: pd.array(['a', 'b', 'c'], dtype='category')
Out[2]: 
[a, b, c]
Categories (3, object): [a, b, c]

2、用于提取Series或Index数组的新方法

在老的pandas版本里,我们可以通过.values来提取Series或者DataFrame的数据数组,而从0.24版本开始,Pandas提供了两个新的方法.array.to_numpy()

In [3]: idx = pd.period_range('2000', periods=4)

In [4]: idx.array
Out[4]: 
<PeriodArray>
['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04']
Length: 4, dtype: period[D]

In [5]: pd.Series(idx).array
Out[5]: 
<PeriodArray>
['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04']
Length: 4, dtype: period[D]

老的方法每次返回的都是ndarray类型,而如果数据是Pandas自定义的数据类型就无法实现。所以在新版里,如果你想获取NumPy的ndarry,可以使用新办法:In [7]: idx.to_numpy()
Out[7]: 
array([Period('2000-01-01', 'D'), Period('2000-01-02', 'D'),
       Period('2000-01-03', 'D'), Period('2000-01-04', 'D')], dtype=object)

In [8]: pd.Series(idx).to_numpy()
Out[8]: 
array([Period('2000-01-01', 'D'), Period('2000-01-02', 'D'),
       Period('2000-01-03', 'D'), Period('2000-01-04', 'D')], dtype=object)

Pandas新版依然保留了.values的方法,但官方强烈建议用.array.to_numpy()来替代.values。

3、read_html()功能改进

在之前的版本,如果是一个正常的html table,pandas的read_html方法可以快速的将表格数据读取为一个DataFrame。但是,如果html table带有colspanrowspan属性的合并字段情况下,pandas会读取错误。

比如,我们这里有一个表格:

Pandas 0.24发布,将放弃Python 2

html代码是:

In [8]: result = pd.read_html("""
   ....:   <table>
   ....:     <thead>
   ....:       <tr>
   ....:         <th>A</th><th>B</th><th>C</th>
   ....:       </tr>
   ....:     </thead>
   ....:     <tbody>
   ....:       <tr>
   ....:         <td colspan="2">1</td><td>2</td>
   ....:       </tr>
   ....:     </tbody>
   ....:   </table>""")
   ....:

老版本read_html读取到的数据格式为:

In [9]: result
Out [9]:
[   A  B   C
 0  1  2 NaN]

而新版pandas读取到的结果是:

In [10]: result
Out[10]: 
[   A  B  C
 0  1  1  2

 [1 rows x 3 columns]]

可以看出,实际上旧版读取出来的数据是错误,而0.24版本进行了改进。

新旧版本的不兼容问题

除了增加了新接口,在一些功能方面也做了一些调整,我只拿最重要的变化来举例,希望各位Pandas的重度用户注意一下这些变化。

1、时间周期对象的加减操作
对于时间类型的加减操作,在以前的版本,返回的是整形结果,比如说两个日期相减:

In [12]: june = pd.Period('June 2018')

In [13]: april = pd.Period('April 2018')

In [14]: june - april
Out [14]: 2

而在新版里,结果为DateOffset对象:

In [16]: june = pd.Period('June 2018')

In [17]: april = pd.Period('April 2018')

In [18]: june - april
Out[18]: <2 * MonthEnds>


2、DataFrame广播运算的变化

对于DF的广播运算操作主要的变化有:
1)对于具有1行或1列的2维的DF运算操作,将以相同的ndarray方式进行广播。
2)DataFrame进行一个列表或元组运算,进行逐列操作,而不是行数全匹配。

来看一个实例:

In [87]: arr = np.arange(6).reshape(3, 2)

In [88]: df = pd.DataFrame(arr)

In [89]: df
Out[89]: 
   0  1
0  0  1
1  2  3
2  4  5

[3 rows x 2 columns]

以前的方式,如果不匹配,会抛出ValueError

In [5]: df == arr[[0], :]
    ...: # comparison previously broadcast where arithmetic would raise
Out[5]:
       0      1
0   True   True
1  False  False
2  False  False
In [6]: df + arr[[0], :]
...
ValueError: Unable to coerce to DataFrame, shape must be (3, 2): given (1, 2)

In [7]: df == (1, 2)
    ...: # length matches number of columns;
    ...: # comparison previously raised where arithmetic would broadcast
...
ValueError: Invalid broadcasting comparison [(1, 2)] with block values
In [8]: df + (1, 2)
Out[8]:
   0  1
0  1  3
1  3  5
2  5  7

In [9]: df == (1, 2, 3)
    ...:  # length matches number of rows
    ...:  # comparison previously broadcast where arithmetic would raise
Out[9]:
       0      1
0  False   True
1   True  False
2  False  False
In [10]: df + (1, 2, 3)
...
ValueError: Unable to coerce to Series, length must be 2: given 3

在新版里,是这样的效果:
# Comparison operations and arithmetic operations both broadcast.
In [90]: df == arr[[0], :]
Out[90]: 
       0      1
0   True   True
1  False  False
2  False  False

[3 rows x 2 columns]

In [91]: df + arr[[0], :]
Out[91]: 
   0  1
0  0  2
1  2  4
2  4  6

[3 rows x 2 columns]

# Comparison operations and arithmetic operations both broadcast.
In [92]: df == (1, 2)
Out[92]: 
       0      1
0  False  False
1  False  False
2  False  False

[3 rows x 2 columns]

In [93]: df + (1, 2)
Out[93]: 
   0  1
0  1  3
1  3  5
2  5  7

[3 rows x 2 columns]

总结

除了上述一些变化以外,其实还有很多改进或者变动。总的来说,0.24.0版做了不少改进,也开启了pandas正式全面拥抱Python 3的进程,希望Pandas越来越好,也希望每一个用Pandas做数据分析的用户都能在数据里挖据出数据价值,同时实现自己的价值。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pandas 0.24发布,将放弃Python 2

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pandas 0.24发布,将放弃Python 2

很多Pythoner应该早就知道,Python核心团队将在2020年1月1日停止支持Python 2.7。我们也看到了用于Python数据分析的各种神器也陆续公布了取消支持Python 2.7的计划。IPython是首批放弃对Python
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录