在Python數據處理中,常常會遇到缺失值的問題。其中,pandas庫中的fillna函數為我們解決了許多問題,使得數據處理變得更加簡單和高效。
一、fillna函數的基本介紹
fillna函數是pandas庫中用於填充NaN值的函數,其基本語法如下:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
其中,value參數代表填充值,可以是標量值、字典或Series類型;method參數代表填充方式,可以是前向填充ffill、後向填充bfill、插值填充等方式;axis參數代表填充方向,可選參數為0或1;inplace參數代表是否修改原數據集,True為修改,False為不修改;limit參數代表連續NaN值的最大填充數量;downcast參數代表是否降低填充值的類型。
二、fillna函數的用法示例
1. 使用標量值進行填充
通過將value參數設置為標量值,我們可以將缺失值全部填充為該值。例如:
import pandas as pd
data = {'列1': [1, 2, None, 4], '列2': [5, 6, None, 8]}
df = pd.DataFrame(data)
df.fillna(0, inplace=True)
print(df)
輸出結果為:
列1 列2
0 1.0 5
1 2.0 6
2 0.0 0
3 4.0 8
可以看到,我們將所有的缺失值都用了0進行填充。
2. 使用前向填充或後向填充進行填充
通過將method參數設置為ffill或bfill,我們可以使用前向填充或後向填充進行填充。例如:
import pandas as pd
data = {'列1': [1, None, None, 4], '列2': [5, 6, None, 8]}
df = pd.DataFrame(data)
df.fillna(method='ffill', inplace=True)
print(df)
輸出結果為:
列1 列2
0 1.0 5
1 1.0 6
2 1.0 6
3 4.0 8
由於第一行沒有NaN值,因此沒有填充;第二行使用前向填充填充為1;第三行在前一行已經被填充,因此還是填充為1;第四行使用前向填充填充為4。
3. 使用插值進行填充
通過將method參數設置為插值方法,我們可以使用插值進行填充。常用的插值方法包括線性插值method=’linear’和多項式插值method=’polynomial’。例如:
import pandas as pd
data = {'列1': [1, None, 3, 4], '列2': [5, 6, None, 8]}
df = pd.DataFrame(data)
df.fillna(method='linear', inplace=True)
print(df)
輸出結果為:
列1 列2
0 1.0 5
1 2.0 6
2 3.0 7
3 4.0 8
由於缺失值的位置在第二行和第三行,因此使用線性插值方法填充後,第二行的值為(1+3)/2=2,第三行的值為(3+4)/2=3.5。
三、fillna函數的參數設置技巧
1. 合理設置填充方式
對於不同的數據集,我們需要根據實際情況來選擇合適的填充方式。如果要填充的數據集是時間序列數據,那麼採用前向填充或後向填充可能更為合適;如果要填充的數據集是數值型數據,那麼可以採用插值填充來更加準確地填充數據。
2. 某些列不進行填充
如果某些列中的缺失值數量很少,或者不需要進行填充,那麼可以使用字典類型的填充值來進行填充。例如,我們只需要對列1進行填充,列2不進行填充,可以使用如下代碼:
import pandas as pd
data = {'列1': [1, None, None, 4], '列2': [5, 6, None, 8]}
df = pd.DataFrame(data)
df.fillna({'列1': 0}, inplace=True)
print(df)
輸出結果為:
列1 列2
0 1.0 5
1 0.0 6
2 0.0 NaN
3 4.0 8
3. 使用fillna進行數據轉換
fillna函數常常也可以用於數據轉換,例如,我們可以使用fillna函數將缺失值替換為特定的數據類型或者數值。例如:
import pandas as pd
import numpy as np
data = {'列1': [1, None, None, 4], '列2': [5, 6, None, 8]}
df = pd.DataFrame(data)
df.fillna(value={'列1': 0, '列2': np.mean(df['列2'])},
inplace=True)
print(df)
輸出結果為:
列1 列2
0 1.0 5.0
1 0.0 6.0
2 0.0 6.3
3 4.0 8.0
在這個例子中,我們使用fillna函數將列1的缺失值填充為0,而將列2的缺失值填充為列2的平均值。
四、總結
通過本文的介紹,我們了解到fillna函數是pandas庫中用於填充缺失值的重要函數。我們可以通過選擇合適的填充方式、某些列不進行填充和對缺失值進行數據轉換等方法,來更好地解決數據集中的缺失值問題。在數據處理中,fillna函數無疑是重要的工具之一。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257390.html