Pythonを一から勉強してデータ分析できるようになる

~ Pythonとデータ分析のお勉強の記録 ~

欠損値の取り扱い

[Take0] テスト用のデータフレームを作成する

 

【書式】

None は欠損値を意味する

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
print(dfA)

 

【結果】

国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
三郎 NaN NaN
四郎 4.0 8.0

 

 

[Take1] 欠損値の数をカウントする

 

【書式】

df.isnull().sum()

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
dfA.isnull().sum()

 

【結果】

国語 1
数学 2
dtype: int64

 

 

[Take2] 欠損値のあるデータを削除する

 

【書式】

df.dropna()

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
# 欠損値のあるデータを削除する
dfB=dfA.dropna()
 
# 結果表示
print("削除前",dfA)
print("\n")
print("削除後",dfB)

 

【結果】

削除前 国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
三郎 NaN NaN
四郎 4.0 8.0
 
 
削除後 国語 数学
一郎 1.0 5.0
四郎 4.0 8.0

 

4レコードのうち、2レコードが消える・・・

 

[Take3] 特定列に欠損値のあるデータを削除する

 

【書式】

df=df.dropna(subset=["列名"])

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
# 「国語」列に欠損値のあるデータを削除する
dfB=dfA.dropna(subset=["国語"])
 
# 結果表示
print("削除前",dfA)
print("\n")
print("削除後",dfB)

 

【結果】

削除前 国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
三郎 NaN NaN
四郎 4.0 8.0
 
 
削除後 国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
四郎 4.0 8.0

 

 

[Take4] 欠損値を平均値で置き換えて表示する

 

【書式】

df=df.fillna(df.mean())
※ここでいう平均は、欠損値以外の平均値

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
# 欠損値のあるデータを削除する
dfB=dfA.fillna(dfA.mean())
 
# 結果表示
print("削除前",dfA)
print("\n")
print("削除後",dfB)

 

【結果】

削除前 国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
三郎 NaN NaN
四郎 4.0 8.0
 
 
削除後 国語 数学
一郎 1.000000 5.0
二郎 2.000000 6.5
三郎 2.333333 6.5
四郎 4.000000 8.0

 

 

[Take5] 欠損値をひとつ前の値で置き換えて表示する

 

【書式】

df=df.fillna(method="ffill")

 

【コード】

import pandas as pd
data={
    "国語":[1,2,None,4],
    "数学":[5,None,None,8]
}
idx=["一郎","二郎","三郎","四郎"]
dfA=pd.DataFrame(data,index=idx)
 
# 欠損値のあるデータを削除する
dfB=dfA.fillna(method='ffill')
 
# 結果表示
print("削除前",dfA)
print("\n")
print("削除後",dfB)

 

【結果】

削除前 国語 数学
一郎 1.0 5.0
二郎 2.0 NaN
三郎 NaN NaN
四郎 4.0 8.0
 
 
削除後 国語 数学
一郎 1.0 5.0
二郎 2.0 5.0
三郎 2.0 5.0
四郎 4.0 8.0

 

三郎の国語の点数が、二郎と同じ2に変更された。