Pandas數(shù)據(jù)填充的具體實(shí)現(xiàn)
前言
在數(shù)據(jù)分析與預(yù)處理過(guò)程中,臟數(shù)據(jù)幾乎不可避免,這直接影響到后續(xù)分析的準(zhǔn)確性和可靠性。清洗數(shù)據(jù)中最常見(jiàn)的就是處理空值。Pandas DF的數(shù)據(jù)填充功能非常強(qiáng)大。本文介紹Pandas中常用的幾種數(shù)據(jù)填充(也稱(chēng)為缺失值處理)方法,使數(shù)據(jù)清洗工作更加高效。
填充
fillna()是Pandas中最基礎(chǔ)也是最靈活的填充缺失值方法。它允許你用特定的值、Series、DataFrame或前一個(gè)/后一個(gè)非空值來(lái)填充缺失值(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填充
可以使用一個(gè)Series對(duì)不同列使用不同的值進(jìn)行填充, 具體如下:
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
同一行中指定列值進(jìn)行填充
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
插值
插值法是一個(gè)非常有用的功能,通過(guò)插值進(jìn)行填充可以保證一些時(shí)序數(shù)值相對(duì)合理和連續(xù)。這特別能夠避免一些因?yàn)閿?shù)據(jù)丟失原因產(chǎn)生的跳空出現(xià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
時(shí)間序列插值
當(dāng)df使用datetime作為索引時(shí),支持基于時(shí)間的插值,如下代碼給出了示例:
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 # 對(duì)比普通線(xiàn)性插值和時(shí)間序列插值 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, 同時(shí)也支持SciPy的幾個(gè)‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial等不同的插值類(lèi)型。具體不同插值類(lèi)型可以在遇到需要的時(shí)候,深入閱讀文檔研究,本文不在重復(fù)贅述。
到此這篇關(guān)于Pandas數(shù)據(jù)填充的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)填充內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表
使用Python從Excel讀取數(shù)據(jù)并在PowerPoint幻燈片中創(chuàng)建圖表不僅能夠極大地簡(jiǎn)化圖表創(chuàng)建過(guò)程,通過(guò)Python這一橋梁,我們可以輕松實(shí)現(xiàn)數(shù)據(jù)自動(dòng)化處理和圖表生成,本文將演示如何使用Python讀取Excel數(shù)據(jù)在PPT中創(chuàng)建圖表,需要的朋友可以參考下2024-08-08Python把png轉(zhuǎn)成jpg的項(xiàng)目實(shí)踐
本文主要介紹了Python把png轉(zhuǎn)成jpg的項(xiàng)目實(shí)踐,可以使用PIL庫(kù)來(lái)將PNG圖片轉(zhuǎn)換為JPG格式,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02用Python實(shí)現(xiàn)換行符轉(zhuǎn)換的腳本的教程
這篇文章主要介紹了用Python實(shí)現(xiàn)換行符轉(zhuǎn)換的腳本的教程,代碼非常簡(jiǎn)單,包括一個(gè)對(duì)操作說(shuō)明的功能的實(shí)現(xiàn),需要的朋友可以參考下2015-04-04對(duì)python3中, print橫向輸出的方法詳解
今天小編就為大家分享一篇對(duì)python3中, print橫向輸出的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01使用python?matplotlib畫(huà)折線(xiàn)圖實(shí)例代碼
Matplotlib是一個(gè)Python工具箱,用于科學(xué)計(jì)算的數(shù)據(jù)可視化,下面這篇文章主要給大家介紹了關(guān)于如何使用python?matplotlib畫(huà)折線(xiàn)圖的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python實(shí)現(xiàn)隨機(jī)生成算術(shù)題的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)隨機(jī)生成算術(shù)題的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04Python計(jì)算一個(gè)點(diǎn)到所有點(diǎn)的歐式距離實(shí)現(xiàn)方法
今天小編就為大家分享一篇Python計(jì)算一個(gè)點(diǎn)到所有點(diǎn)的歐式距離實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07