【パンダデータ分析5】データクリーニング

5. データクリーニング

ソースデータ:

import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('../data/马士兵课程记录.xlsx')
print(df)
print('---------------------------------------------------------------')
   买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
10     msb010           1980.00         1.0              科技英语  课程   2020-03-28

1. 欠損値を表示する

DataFrame オブジェクトを操作するinfo()メソッド

print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11 entries, 0 to 10
Data columns (total 6 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   买家会员名     11 non-null     object        
 1   买家实际支付金额  11 non-null     float64       
 2   课程总数量     9 non-null      float64       
 3   课程标题      11 non-null     object        
 4   类别        9 non-null      object        
 5   订单付款时间    11 non-null     datetime64[ns]
dtypes: datetime64[ns](1), float64(2), object(3)
memory usage: 656.0+ bytes
None

2. データに欠損値があるかどうかを判断します

DataFrame を操作するためのisnull()メソッドとnotnull()メソッド

print(df.isnull())
print('---------------------------------------------------------------')
print(df.notnull())
    买家会员名  买家实际支付金额  课程总数量  课程标题   类别  订单付款时间
0        False             False       False     False  False         False
1        False             False       False     False   True         False
2        False             False       False     False  False         False
3        False             False        True     False  False         False
4        False             False       False     False   True         False
5        False             False       False     False  False         False
6        False             False       False     False  False         False
7        False             False        True     False  False         False
8        False             False       False     False  False         False
9        False             False       False     False  False         False
10       False             False       False     False  False         False
---------------------------------------------------------------
    买家会员名  买家实际支付金额  课程总数量  课程标题   类别  订单付款时间
0         True              True        True      True   True          True
1         True              True        True      True  False          True
2         True              True        True      True   True          True
3         True              True       False      True   True          True
4         True              True        True      True  False          True
5         True              True        True      True   True          True
6         True              True        True      True   True          True
7         True              True       False      True   True          True
8         True              True        True      True   True          True
9         True              True        True      True   True          True
10        True              True        True      True   True          True

3. 欠損値の対処方法

  • 対処しない

  • 消去

    • すべての NaN を削除する
    df = df.dropna()
    print(df)
    
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • NaN ではないものを抽出するか、指定された NaN を削除します
    df = df[df['课程总数量'].notnull()]
    print(df)
    
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
  • 埋めるか交換する

df['课程总数量'] = df['课程总数量'].fillna(0)
print(df)
   买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
3      msb004           9980.00         0.0  算法与数据结构进阶班  课程   2020-06-30
4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
7      msb008              1.00         0.0            自定义注解  课程   2020-03-26
8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
  • 補間 (平均値、中央値、最頻値などの埋め込み)

4. 重複値の処理

  • 重複する値があるかどうかを判断する
print(df.duplicated())
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10     True
dtype: bool
  • 重複排除
df = df.drop_duplicates()
print(df)
  买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0     msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
1     msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
2     msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
3     msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
4     msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5     msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6     msb007           2400.00         1.0              操作系统  课程   2020-03-25
7     msb008              1.00         NaN            自定义注解  课程   2020-03-26
8     msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
9     msb010           1980.00         1.0              科技英语  课程   2020-03-28
  • 指定された列の重複データを削除し、後者のデータを保持します
df = df.drop_duplicates(['买家实际支付金额'], keep='last')
print(df)
   买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
  • 直接削除し、コピーを保存してください
new_df = df.drop_duplicates(['买家实际支付金额'], inplace=False)
print(new_df)  # 修改后
print('-----------------------------------------------------------------------------------')
print(df)  # 原数据
  买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0     msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
1     msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
2     msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
4     msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5     msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6     msb007           2400.00         1.0              操作系统  课程   2020-03-25
8     msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
9     msb010           1980.00         1.0              科技英语  课程   2020-03-28
-----------------------------------------------------------------------------------
   买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
10     msb010           1980.00         1.0              科技英语  课程   2020-03-28

5. 外れ値の検出と処理

  • 異常値とは何ですか
    • 正常範囲外またはそれ以下の値
  • 外れ値を検出する方法
    • 与えられたデータ範囲に従って判定し、その範囲外のデータを外れ値とみなす
    • 平均二乗誤差
    • 箱ひげ図
  • 外れ値を処理する方法
    • 消去
    • 欠損値を扱う場合
    • 特別な状況が分析された場合

おすすめ

転載: blog.csdn.net/m0_70885101/article/details/127191521#comments_27820927
おすすめ