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版本做了一些功能增強,這裡只介紹增加的幾個新介面。
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,可以使用新辦法:Series.to_numpy()
or Index.to_numpy()來實現。
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帶有colspan
和rowspan
屬性的合併欄位情況下,pandas會讀取錯誤。
比如,我們這裡有一個表格:
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版本進行了改進。
新舊版本的不相容問題
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做資料分析的使用者都能在資料裡挖據出資料價值,同時實現自己的價值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908612/viewspace-2637030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 即將放棄Python 2.7的不止有Numpy,還有pandas和這些工具Python
- 官方調研重磅釋出,Pandas或將重構?
- Python 決定放棄 BPO,將所有 Bug 遷移到 GitHub 中PythonGithub
- ASP.NET Core OData 9的釋出,放棄 .NET FrameworkASP.NETFramework
- Python 從入門到放棄——Python科普!Python
- Kotlin 2版本即將釋出Kotlin
- 微軟要放棄Electron了???聊聊WebView2微軟WebView
- Node HTTP/2 Server Push 從瞭解到放棄HTTPServer
- [多圖]Linux Lite 4.0釋出:基於Ubuntu 18.04 LTS 放棄32位版本LinuxUbuntu
- Python 之父 Guido van Rossum放棄退休,加入微軟PythonGUIROS微軟
- 【爬蟲】python爬蟲從入門到放棄爬蟲Python
- .NET 8 RC 2 釋出,將在11月14日釋出正式版
- Mozilla Firefox和Google Chrome即將放棄對FTP的支援FirefoxGoChromeFTP
- Python學習從入門到放棄?我不允許!!!Python
- 你是如何看待chrome將在2020年徹底放棄Flash?Chrome
- 幽默:如果OpenAI更名為ClosedAI,馬斯克將放棄訴訟OpenAI馬斯克
- ROG 2020新品釋出會 天生高能釋放
- python pandasPython
- 微信小程式從入門到放棄 Num.2微信小程式
- 學Python好久都學不會?然後選擇放棄,總結出這幾個原因Python
- 怎樣學python ,才不會從入門到放棄Python
- python萌新:從零基礎入門到放棄Python
- 我放棄了MVP - mironovMVP
- 為什麼放棄jQueryjQuery
- 放棄jQuery, 使用原生jsjQueryJS
- 曝iPad Air將採用OLED屏,蘋果要放棄LCD了iPadAI蘋果
- ARM CPU 將在 2022 年放棄對 32 位運算的支援
- [Python] 程式釋出Python
- NVIDIA 或將放棄以 400 億美元收購 Arm:毫無進展
- Python 3.8.0a2 釋出,物件導向程式語言Python物件
- deepspeed從入門到放棄
- NumPy從入門到放棄
- Ansible 快速入門到放棄
- 放棄意義,換取力量
- XXE從入門到放棄
- Vue 從入門到放棄Vue
- Nginx從入門到放棄Nginx
- Git 從入門到放棄Git