Python Pandas - ไม่มีข้อมูล

ข้อมูลที่ขาดหายไปมักเป็นปัญหาในชีวิตจริง พื้นที่ต่างๆเช่นการเรียนรู้ของเครื่องและการขุดข้อมูลต้องเผชิญกับปัญหาที่รุนแรงในด้านความแม่นยำของการคาดคะเนแบบจำลองเนื่องจากข้อมูลมีคุณภาพต่ำซึ่งเกิดจากค่าที่ขาดหายไป ในพื้นที่เหล่านี้การรักษามูลค่าที่ขาดหายไปเป็นจุดสำคัญในการทำให้แบบจำลองมีความแม่นยำและถูกต้องมากขึ้น

เมื่อใดและเหตุใดจึงไม่มีข้อมูล

ให้เราพิจารณาแบบสำรวจออนไลน์สำหรับผลิตภัณฑ์ หลายครั้งผู้คนไม่เปิดเผยข้อมูลทั้งหมดที่เกี่ยวข้องกับพวกเขา มีคนเพียงไม่กี่คนที่แบ่งปันประสบการณ์ของพวกเขา แต่ใช้ผลิตภัณฑ์ไม่นานเท่าไหร่ มีเพียงไม่กี่คนที่แบ่งปันระยะเวลาที่ใช้ผลิตภัณฑ์ประสบการณ์ของพวกเขา แต่ไม่ใช่ข้อมูลติดต่อของพวกเขา ดังนั้นในบางกรณีหรืออีกวิธีหนึ่งข้อมูลส่วนหนึ่งมักจะหายไปและเป็นเรื่องปกติมากในเวลาจริง

มาดูกันว่าเราจะจัดการกับค่าที่ขาดหายไปได้อย่างไร (พูดว่า NA หรือ NaN) โดยใช้ Pandas

# import the pandas library
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b        NaN        NaN        NaN
c  -0.390208  -0.551605  -2.301950
d        NaN        NaN        NaN
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g        NaN        NaN        NaN
h   0.085100   0.532791   0.887415

เราได้สร้าง DataFrame โดยใช้การทำดัชนีใหม่โดยใช้ค่าที่ขาดหายไป ในผลลัพธ์NaN หมายถึง Not a Number.

ตรวจสอบค่าที่หายไป

เพื่อให้การตรวจจับค่าที่หายไปง่ายขึ้น (และข้ามประเภทอาร์เรย์ต่างๆ) Pandas จัดเตรียมไฟล์ isnull() และ notnull() ฟังก์ชันซึ่งเป็นวิธีการบนวัตถุ Series และ DataFrame ด้วย -

ตัวอย่าง 1

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].isnull()

มัน output มีดังนี้ -

a  False
b  True
c  False
d  True
e  False
f  False
g  True
h  False
Name: one, dtype: bool

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].notnull()

มัน output มีดังนี้ -

a  True
b  False
c  True
d  False
e  True
f  True
g  False
h  True
Name: one, dtype: bool

การคำนวณที่ไม่มีข้อมูล

  • เมื่อรวมข้อมูล NA จะถือว่าเป็นศูนย์
  • หากข้อมูลเป็น NA ทั้งหมดผลลัพธ์จะเป็น NA

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].sum()

มัน output มีดังนี้ -

2.02357685917

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print df['one'].sum()

มัน output มีดังนี้ -

nan

การทำความสะอาด / การกรอกข้อมูลที่ขาดหายไป

นุ่นจัดเตรียมวิธีการต่างๆในการทำความสะอาดค่าที่หายไป ฟังก์ชัน Fillna สามารถ "กรอก" ค่า NA ด้วยข้อมูลที่ไม่ใช่ค่าว่างได้สองวิธีซึ่งเราได้แสดงไว้ในส่วนต่อไปนี้

แทนที่ NaN ด้วยค่าสเกลาร์

โปรแกรมต่อไปนี้จะแสดงวิธีแทนที่ "NaN" ด้วย "0"

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])

df = df.reindex(['a', 'b', 'c'])

print df
print ("NaN replaced with '0':")
print df.fillna(0)

มัน output มีดังนี้ -

one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c   0.744328  -1.735166  1.749580

NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c   0.744328  -1.735166  1.749580

ที่นี่เรากำลังเติมค่าด้วยศูนย์ เราสามารถเติมค่าอื่น ๆ แทนได้

กรอก NA ไปข้างหน้าและข้างหลัง

การใช้แนวคิดการเติมที่กล่าวถึงในบท ReIndexing เราจะเติมเต็มค่าที่ขาดหายไป

ซีเนียร์ No วิธีการและการดำเนินการ
1

pad/fill

วิธีการกรอกไปข้างหน้า

2

bfill/backfill

วิธีเติมย้อนหลัง

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='pad')

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
d  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='backfill')

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b  -0.390208  -0.551605  -2.301950
c  -0.390208  -0.551605  -2.301950
d  -2.000303  -0.788201   1.510072
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g   0.085100   0.532791   0.887415
h   0.085100   0.532791   0.887415

ปล่อยค่าที่ขาดหายไป

หากคุณต้องการยกเว้นค่าที่ขาดหายไปให้ใช้ไฟล์ dropna ฟังก์ชั่นพร้อมกับ axisการโต้เถียง. ตามค่าเริ่มต้นแกน = 0 คือตามแถวซึ่งหมายความว่าหากค่าใด ๆ ภายในแถวเป็น NA จะไม่รวมทั้งแถว

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna()

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna(axis=1)

มัน output มีดังนี้ -

Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]

แทนที่ค่าทั่วไปที่ขาดหายไป (หรือ)

หลายครั้งเราต้องแทนที่ค่าทั่วไปด้วยค่าเฉพาะบางค่า เราสามารถบรรลุสิ่งนี้ได้โดยใช้วิธีการแทนที่

การแทนที่ NA ด้วยค่าสเกลาร์เป็นลักษณะการทำงานที่เทียบเท่ากันของ fillna() ฟังก์ชัน

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})

print df.replace({1000:10,2000:60})

มัน output มีดังนี้ -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})

มัน output มีดังนี้ -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60