今天我們來學習一下pandas中對缺失值的處理,包括isnull、notnull、dropna、fillna
等等。我們使用read_excel來讀取**並且對其進行一些操作。
studf = pd.read_excel(
"./datas/student_excel/student_excel.xlsx"
, skiprows=2)
studf
# 讀取出來的資料
unnamed:
0 姓名 科目 分數
0 nan 小明 語文 85.0
1 nan nan 數學 80.0
2 nan nan 英語 90.0
3 nan nan nan nan
4 nan 小王 語文 85.0
5 nan nan 數學 nan
6 nan nan 英語 90.0
7 nan nan nan nan
8 nan 小剛 語文 85.0
9 nan nan 數學 80.0
10 nan nan 英語 90.0
這個讀取**後面的skipprows是去掉空行的操作,在**中也許有一些沒有用的空行,我們可以指定去掉幾行空行。在我們讀取完畢之後,輸出乙個dataframe**,並且去掉了原來的1、2行,同時我們在讀取的過程中,如果**中有些資料沒有,就會用nan代替,表示此處沒有資料。
這個是**中原有的資料
首先,我們使用isnull檢測是否為空值,這個方法回返回乙個boolean值,如果是空值則返回true,如果不是則返回false,同樣是在dataframe**中展示。
studf.isnull(
)# 輸出的結果。
unnamed:
0 姓名 科目 分數
0true
false
false
false
1true
true
false
false
2true
true
false
false
3true
true
true
true
4true
false
false
false
5true
true
false
true
6true
true
false
false
7true
true
true
true
8true
false
false
false
9true
true
false
false
10true
true
false
false
這個**和上面輸出的剛好對應,我們除了一次性處理空值,也可以進行單獨判斷,返回的是乙個series型別。同樣通過boolean反饋。
studf[
"分數"
].isnull(
)# 輸出的結果
0false
1false
2false
3true
4false
5true
6false
7true
8false
9false
10false
name: 分數, dtype:
bool
isnull()函式判斷是否為空值,而notnull()函式則和它相反,如果是空值則返回false,如果不是空值則返回true。用法是一樣的。同樣我們還可以結合oc()函式進行一些更加高階的操作。
studf.loc[studf[
"分數"
].notnull(),
:]# 篩選沒有空分數的所有行
unnamed:
0 姓名 科目 分數
0 nan 小明 語文 85.0
1 nan nan 數學 80.0
2 nan nan 英語 90.0
4 nan 小王 語文 85.0
6 nan nan 英語 90.0
8 nan 小剛 語文 85.0
9 nan nan 數學 80.0
10 nan nan 英語 90.0
這個loc()函式先進行查詢,然後裡面判斷【分數】這個列的每這個值是不是空值,如果不是空值,就返回true,符合要求輸出。是空值就不會加入要整合的佇列中。所以和上面的相比少了幾行。
pandas為我們提供了dropna()函式對空值進行刪除,可以刪除空值所對應的行,也可以刪除對應的列,只要我們進行引數的約束就好。
studf.dropna(axis=
"columns"
, how=
'all'
, inplace=
true
)#刪除都為空值所對應的列
姓名 科目 分數
0 小明 語文 85.0
1 nan 數學 80.0
2 nan 英語 90.0
3 nan nan nan
4 小王 語文 85.0
5 nan 數學 nan
6 nan 英語 90.0
7 nan nan nan
8 小剛 語文 85.0
9 nan 數學 80.0
10 nan 英語 90.0
因為之前的第一列都為空值,因此第一列就被無情的刪除了,但是別的列因為不是所有的值都為空值,所以儲存下來了。如果把axis改為等於index,就是刪除行了,其他操做是一樣的。
學完了刪除,當然還要學習填充了,pandas的fillna()函式就給我們提供了這一便利。
studf.fillna(
)#把分數這列為空值的地方填充為0
# 等同於
studf.loc[:,
'分數'
]= studf[
'分數'
].fillna(0)
#查詢分數空值的覆蓋寫入
# 輸出
姓名 科目 分數
0 小明 語文 85.0
1 nan 數學 80.0
2 nan 英語 90.0
4 小王 語文 85.0
5 nan 數學 0.0
6 nan 英語 90.0
8 小剛 語文 85.0
9 nan 數學 80.0
10 nan 英語 90.0
我們還可以選擇填充空值前後的數值給空值。
# 使用前面的有效值填充,用ffill:forward fill
studf.loc[:,
'姓名'
]= studf[
'姓名'
].fillna(method=
"ffill"
) 姓名 科目 分數
0 小明 語文 85.0
1 小明 數學 80.0
2 小明 英語 90.0
4 小王 語文 85.0
5 小王 數學 0.0
6 小王 英語 90.0
8 小剛 語文 85.0
9 小剛 數學 80.0
10 小剛 英語 90.0
這個方法就是把姓名這一列中,含有空值的進行copy,而copy的就是這個空值前面的值。如果使用bfill就是copy空值後面的值。大家可以嘗試一下。當我們把資料清洗完畢後,我們就可以用to_excel()把弄好的資料給存到**中去了。
今天學習的就是這些,多多指教,共同進步。
資料分析之遊戲內關鍵資料分析
什麼是遊戲的相關性,作為乙個分析的 偵探 那麼遊戲的相關性也就是線索,熟悉遊戲的相關性的 心法 就可以快速和正確選擇分析的切入點。本文主要通過找到lol遊戲中角色金幣,進而演示。基礎篇 演示直接找到角色金幣邏輯,高階篇 中將會演示如何通過金幣的和交易邏輯的相關性找到角色的裝備 1 選定第乙個裝備欄位...
資料分析之Pandas
from pandas import series,dataframe import pandas as pd import numpy as np states california ohio oregon texas year 2000,2001,2002,2003 value 35000,71...
資料分析之pandas
pandas是基於numpy構建的庫,擁有兩種資料結構 series和dataframe series 就是一維陣列 dataframe 是二維陣列series in 1 from pandas import series,dataframe in 2 import pandas as pd in ...