Pandas數(shù)據(jù)填充的具體實現(xiàn)
前言
在數(shù)據(jù)分析與預處理過程中,臟數(shù)據(jù)幾乎不可避免,這直接影響到后續(xù)分析的準確性和可靠性。清洗數(shù)據(jù)中最常見的就是處理空值。Pandas DF的數(shù)據(jù)填充功能非常強大。本文介紹Pandas中常用的幾種數(shù)據(jù)填充(也稱為缺失值處理)方法,使數(shù)據(jù)清洗工作更加高效。
填充
fillna()是Pandas中最基礎也是最靈活的填充缺失值方法。它允許你用特定的值、Series、DataFrame或前一個/后一個非空值來填充缺失值(NaN)。
常數(shù)填充
In [1]: import pandas as pd In [2]: import numpy as np In [3]: data = {'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3]} In [4]: df = pd.DataFrame(data) In [5]: df Out[5]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 NaN NaN 3 In [6]: df.fillna(0) Out[6]: A B C 0 1.0 5.0 1 1 2.0 0.0 2 2 0.0 0.0 3
Series填充
可以使用一個Series對不同列使用不同的值進行填充, 具體如下:
fill_values = pd.Series([10, 20, 30], index=['A', 'B', 'C']) In [12]: df Out[12]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 NaN NaN 3 In [13]: df.fillna(fill_values) Out[13]: A B C 0 1.0 5.0 1 1 2.0 20.0 2 2 10.0 20.0 3
附近值填充
前向填充: 使用上一行的值
In [18]: df Out[18]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 NaN NaN 3 In [19]: df.ffill() Out[19]: A B C 0 1.0 5.0 1 1 2.0 5.0 2 2 2.0 5.0 3
后向填充: 使用后一行的值
In [22]: data = {'A': [1, 2, np.nan], 'B': [5, np.nan, 88], 'C': [1, 2, 3]} In [23]: df = pd.DataFrame(data) In [24]: df Out[24]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 NaN 88.0 3 In [25]: df.bfill() Out[25]: A B C 0 1.0 5.0 1 1 2.0 88.0 2 2 NaN 88.0 3
同一行中指定列值進行填充
In [28]: df Out[28]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 NaN 88.0 3 In [29]: df['A']=df.apply(lambda row: row['C'] if pd.isnull(row['A']) else row['A'], axis=1) In [30]: df Out[30]: A B C 0 1.0 5.0 1 1 2.0 NaN 2 2 3.0 88.0 3
插值
插值法是一個非常有用的功能,通過插值進行填充可以保證一些時序數(shù)值相對合理和連續(xù)。這特別能夠避免一些因為數(shù)據(jù)丟失原因產(chǎn)生的跳空出現(xiàn)。
線性插值
In [2]: data = {'A': [1, 2, np.nan, 4], 'B': [np.nan, 5, np.nan, 8]} In [3]: df = pd.DataFrame(data) In [4]: df Out[4]: A B 0 1.0 NaN 1 2.0 5.0 2 NaN NaN 3 4.0 8.0 In [5]: df.interpolate() Out[5]: A B 0 1.0 NaN 1 2.0 5.0 2 3.0 6.5 3 4.0 8.0
時間序列插值
當df使用datetime作為索引時,支持基于時間的插值,如下代碼給出了示例:
In [11]: date_index = pd.date_range(start='2024-06-25', periods=7, freq='D') In [12]: dates_to_remove = pd.to_datetime(['2024-06-26', '2024-06-30']) In [13]: date_index = date_index[~date_index.isin(dates_to_remove)] In [14]: date_index Out[14]: DatetimeIndex(['2024-06-25', '2024-06-27', '2024-06-28', '2024-06-29', '2024-07-01'], dtype='datetime64[ns]', freq=None) In [15]: data_ts = {'Value': [1, 2, np.nan, np.nan, 8]} In [16]: pd.DataFrame(data_ts, index=date_index) Out[16]: Value 2024-06-25 1.0 2024-06-27 2.0 2024-06-28 NaN 2024-06-29 NaN 2024-07-01 8.0 # 對比普通線性插值和時間序列插值 In [17]: pd.DataFrame(data_ts, index=date_index).interpolate() Out[17]: Value 2024-06-25 1.0 2024-06-27 2.0 2024-06-28 4.0 2024-06-29 6.0 2024-07-01 8.0 In [18]: pd.DataFrame(data_ts, index=date_index).interpolate(method='time') Out[18]: Value 2024-06-25 1.0 2024-06-27 2.0 2024-06-28 3.5 2024-06-29 5.0 2024-07-01 8.0
Pandas的插值函數(shù)基于scipy.interpolate.interp1d — SciPy v1.13.1 Manual, 同時也支持SciPy的幾個‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial等不同的插值類型。具體不同插值類型可以在遇到需要的時候,深入閱讀文檔研究,本文不在重復贅述。
到此這篇關于Pandas數(shù)據(jù)填充的具體實現(xiàn)的文章就介紹到這了,更多相關Pandas數(shù)據(jù)填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表
使用Python從Excel讀取數(shù)據(jù)并在PowerPoint幻燈片中創(chuàng)建圖表不僅能夠極大地簡化圖表創(chuàng)建過程,通過Python這一橋梁,我們可以輕松實現(xiàn)數(shù)據(jù)自動化處理和圖表生成,本文將演示如何使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表,需要的朋友可以參考下2024-08-08用Python實現(xiàn)換行符轉(zhuǎn)換的腳本的教程
這篇文章主要介紹了用Python實現(xiàn)換行符轉(zhuǎn)換的腳本的教程,代碼非常簡單,包括一個對操作說明的功能的實現(xiàn),需要的朋友可以參考下2015-04-04Python計算一個點到所有點的歐式距離實現(xiàn)方法
今天小編就為大家分享一篇Python計算一個點到所有點的歐式距離實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07