NaN ถูกใช้เป็นตัวยึดสำหรับข้อมูลที่ขาดหายไปอย่างสม่ำเสมอในหมีแพนด้าความสม่ำเสมอเป็นสิ่งที่ดี ฉันมักจะอ่าน / แปลน่านเป็น"หายไป" นอกจากนี้โปรดดูส่วน"การทำงานกับข้อมูลที่ขาดหายไป"ในเอกสาร
Wes เขียนในเอกสาร'choice of NA-representation' :
หลังจากหลายปีของการใช้งาน [NaN] ได้พิสูจน์แล้วอย่างน้อยก็ในความคิดของฉันว่าเป็นการตัดสินใจที่ดีที่สุดเนื่องจากสถานการณ์ใน NumPy และ Python โดยทั่วไป ค่าพิเศษน่าน (ไม่-A-Number) ถูกนำมาใช้ทุกที่เป็นค่า NA และมีฟังก์ชั่น API isnull
และnotnull
ซึ่งสามารถใช้ข้าม dtypes ในการตรวจสอบค่า NA
...
ดังนั้นฉันจึงเลือกวิธี "การปฏิบัติจริงเอาชนะความบริสุทธิ์" ของ Pythonic และการแลกเปลี่ยนความสามารถ NA จำนวนเต็มสำหรับวิธีการที่ง่ายกว่ามากในการใช้ค่าพิเศษใน float และอาร์เรย์อ็อบเจ็กต์เพื่อแสดงถึง NA และส่งเสริมอาร์เรย์จำนวนเต็มให้ลอยเมื่อต้องเป็น NAs แนะนำ
หมายเหตุ: "gotcha" ว่าจำนวนเต็มซีรีส์ที่มีข้อมูลที่ขาดหายไปเป็น upCast ลอย
ในความคิดของเหตุผลหลักที่จะใช้น่าน (กว่าไม่มี) ก็คือว่ามันจะถูกเก็บไว้กับ numpy ของ dtype float64 มากกว่าวัตถุ dtype มีประสิทธิภาพน้อยลงดูNA พิมพ์โปรโมชั่น
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
ความคิดเห็นของ Jeff (ด้านล่าง) เกี่ยวกับสิ่งนี้:
np.nan
อนุญาตให้ดำเนินการแบบเวกเตอร์ มันเป็นค่าลอยในขณะที่None
ตามคำนิยามบังคับประเภทวัตถุซึ่งโดยทั่วไปจะปิดใช้งานประสิทธิภาพทั้งหมดในจำนวน
ทำซ้ำอย่างเร็ว 3 ครั้ง: object == bad, float == good
กล่าวได้ว่าการดำเนินการหลายอย่างอาจยังใช้งานได้ดีกับ None vs NaN (แต่อาจไม่รองรับเช่นบางครั้งอาจให้ผลลัพธ์ที่น่าประหลาดใจ ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
เพื่อตอบคำถามที่สอง:
คุณควรใช้pd.isnull
และpd.notnull
ทดสอบข้อมูลที่ขาดหายไป (NaN)
qwerty
ไม่ใช่ตัวเลข