欠損値処理の一般的な方法: 判定、検索、埋め込み、削除

欠損値を処理するプロセスと方法の概要:

1. データの読み取り
import numpy as np
data = np.genfromtxt("test.txt",delimiter=',')     #也可以用其他方法读取数据
print(type(data))
print(data)
# output
<class 'numpy.ndarray'>
[[  1. 100.]
 [  2.  90.]
 [  3.  nan]
 [  4.  70.]
 [  5.  nan]
 [  6.  70.]
 [  7.  85.]
 [  8.  75.]
 [  9.  nan]]

上記の出力結果から、データは 9 行 2 列であり、2 列目に 3 つの欠損値があることがわかります

  1. np.nan は null オブジェクトではありません。
  2. リスト内のnanを操作する場合、「==np.nan」による判定はできません。np.isnan()でのみ操作できます。
  3. np.nan のデータ型は float です。
2. データに null 値があるかどうかを判断します。
  • numpy の使用: np.isnan() 関数
np.isnan(data)    # 判断数据是否含空值
# output
array([[False, False],
       [False, False],
       [False,  True],
       [False, False],
       [False,  True],
       [False, False],
       [False, False],
       [False, False],
       [False,  True]])

出力結果からわかるように、null 以外の値は False を返し、空の値は True を返します。

np.isnan(data[:,1])    # 查看第1列是否存在空值(下标从0开始)
np.isnan(data[2,:])    # 查看第2行是否存在空值(下标从0开始)
  • パンダの使用: isnull() 関数

1. 上記で読み取ったデータ型は <class 'numpy.ndarray'> であるため、まずデータ型を変換します。

import pandas as pd
data_pd = pd.DataFrame(data)    #将数据转换成DataFrame类型
print(type(data_pd))
# output
<class 'pandas.core.frame.DataFrame'>

2. isnull() オペレーションを実行します。

data_pd.isnull()     #效果等同于np.isnan()函数,同样会返回布尔值

出力
ここに画像の説明を挿入

data_pd[0].isnull()       #判断第0列是否存在空值(下标从0开始)
data_pd[1].isnull()       #判断第1列是否存在空值(下标从0开始)
data_pd[[0,1]].isnull()   #判断第0列和第1列是否存在空值(下标从0开始),效果等同于data_pd.isnull()
3. null/非null値の数を数える

1.各列のNULL値の数を数える

data_pd.isnull().sum()  # 统计每列的空值数量
#output 00个空值,第13个空值
0    0
1    3
dtype: int64

2.各列のnull以外の値の数を数える

data_pd.notnull().sum()  
#output 
0    9
1    6
dtype: int64

3. その他これに付随する業務

data_pd.count()        # 统计所有列的非空值数量
data_pd[1].count()     # 第1列非空数量(下标从0开始)
data_pd.count(axis=1)  # 每行非空值数量,axis=1
4. null 値に基づいてデータをフィルタリングする

1. data_pd 内の null 値を含む行をフィルターで除外します。

data_pd[data_pd.isnull().values==True] 

出力
ここに画像の説明を挿入
2. 列 1 が空であるすべての行をフィルターで除外します (添え字は 0 から始まります)。

data_pd[data_pd[1].isnull()]

出力
ここに画像の説明を挿入

5. null インデックスの検索
np.where(np.isnan(data_pd))       # data_pd中空值所在的行索引及列索引
np.where(np.isnan(data_pd[1]))    # data_pd中第1列空值所在的行索引
6. 空の値を埋める fillna() 関数、replace() メソッド (キーと値のペア構造が内部に埋められます)
# 用指定的数字来填充
data_pd.fillna(0)   # 用0来填充data_pd中的空值
 
# 用指定的函数统计值来填充
data_pd.fillna(data_pd.mean())    # 用data_pd中数据的平均值来填充空值
data_pd.fillna(data_pd.mean()[1]) #指定用第1列数据均值来填充data_pd中空值
data_pd[1]=data_pd[1].fillna(data_pd[1].mean()) #指定用第1列数据均值来填充第1列数据中空值
data_pd.fillna(data_pd.sum())   # 用data_pd中数据的和来填充空值

# 使用插值法填充
data=np.genfromtxt('test.txt',delimiter=',')
data=pd.DataFrame(data)
data[1] = data[1].interpolate()

# 用字典来填充
values = {
    
    '0':6, '1': 9}   # 0列空值用6填充,1列空值用9填充
data_pd.fillna(value=values)    
 
# 用指定字符串来填充空值
data_pd.fillna("null")

#上下数据补全 
# 不同的填充方式{
    
    ‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
# 每列的空值,用其列下方非空数值填充
data_pd.fillna(method="backfill")  
data_pd.fillna(method="bfill")   # 同backfill
# 每列的空值,用其所在列上方非空数值填充,若上方没有元素,保持空值
data_pd.fillna(method="ffill")  
data_pd.fillna(method="pad")     # 同 ffill
 
#limit参数设置填充空值的最大个数
data_pd.fillna(0,limit=1)  # 每列最多填充1个空值,超过范围的空值依然为空
 
#inplace参数空值是否修改原数据data_pd
data_pd.fillna(0,inplace=True)  # inplace为true,将修改作用于原数据
7. null値のdropna()関数を削除します。
8.欠損値を埋める回帰式

参考:numpy配列のnull値の扱い方
Pandas+Numpyのnull値に対するデータ処理操作:判定、検索、埋め込み、削除

おすすめ

転載: blog.csdn.net/qq_41238751/article/details/126263672