กำหนดดาต้าเฟรมของแพนด้าที่มีค่า NaN ที่เป็นไปได้ซึ่งกระจัดกระจายอยู่ที่นี่และที่นั่น:
คำถาม:ฉันจะทราบได้อย่างไรว่าคอลัมน์ใดมีค่า NaN โดยเฉพาะอย่างยิ่งฉันจะได้รับรายชื่อคอลัมน์ที่มี NaNs หรือไม่
กำหนดดาต้าเฟรมของแพนด้าที่มีค่า NaN ที่เป็นไปได้ซึ่งกระจัดกระจายอยู่ที่นี่และที่นั่น:
คำถาม:ฉันจะทราบได้อย่างไรว่าคอลัมน์ใดมีค่า NaN โดยเฉพาะอย่างยิ่งฉันจะได้รับรายชื่อคอลัมน์ที่มี NaNs หรือไม่
คำตอบ:
อัปเดต:โดยใช้ Pandas 0.22.0
Pandas เวอร์ชันที่ใหม่กว่ามีเมธอดใหม่'DataFrame.isna ()'และ'DataFrame.notna ()'
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
เป็นรายการคอลัมน์:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
เพื่อเลือกคอลัมน์เหล่านั้น (มีอย่างน้อยหนึ่งNaN
ค่า):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
คำตอบเก่า:
พยายามใช้isnull () :
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
หรือเป็น @root เสนอเวอร์ชันที่ชัดเจนกว่า:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
เพื่อเลือกชุดย่อย - คอลัมน์ทั้งหมดที่มีอย่างน้อยหนึ่งNaN
ค่า:
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
df.columns[df.isin['xxx'].any()].tolist()
df.columns[df.eq(search_for_value).any()].tolist()
isna
ได้notna
ไหม
คุณสามารถใช้df.isnull().sum()
. จะแสดงคอลัมน์ทั้งหมดและ NaN ทั้งหมดของแต่ละคุณลักษณะ
ฉันมีปัญหาที่ฉันต้องใช้หลายคอลัมน์เพื่อตรวจสอบด้วยสายตาบนหน้าจอดังนั้นรายการคอมพ์สั้น ๆ ที่กรองและส่งคืนคอลัมน์ที่กระทำผิดคือ
nan_cols = [i for i in df.columns if df[i].isnull().any()]
หากสิ่งนั้นเป็นประโยชน์กับทุกคน
ในชุดข้อมูลที่มีคอลัมน์จำนวนมากควรดูว่ามีคอลัมน์จำนวนเท่าใดที่มีค่า null และจำนวนคอลัมน์ที่ไม่มี
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
ตัวอย่างเช่นในดาต้าเฟรมของฉันมี 82 คอลัมน์ซึ่ง 19 มีค่าว่างอย่างน้อยหนึ่งค่า
นอกจากนี้คุณยังสามารถลบคอลัมน์และแถวโดยอัตโนมัติขึ้นอยู่กับว่าค่าใดมีค่าว่างมากกว่า
นี่คือรหัสที่ทำสิ่งนี้อย่างชาญฉลาด:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
หมายเหตุ:โค้ดด้านบนจะลบค่าว่างทั้งหมดของคุณ หากคุณต้องการค่า null ให้ประมวลผลก่อน
ฉันใช้รหัสสามบรรทัดนี้เพื่อพิมพ์ชื่อคอลัมน์ซึ่งมีค่า null อย่างน้อยหนึ่งค่า:
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
ทั้งสองอย่างนี้ควรใช้งานได้:
df.isnull().sum()
df.isna().sum()
เมธอด DataFrame isna()
หรือisnull()
เหมือนกันทั้งหมด
หมายเหตุ : สตริงว่าง''
ถือเป็น False (ไม่ถือว่าเป็น NA)
สิ่งนี้ได้ผลสำหรับฉัน
1. เพื่อให้คอลัมน์มีค่า null อย่างน้อย 1 ค่า (ชื่อคอลัมน์)
data.columns[data.isnull().any()]
2. สำหรับการรับ Columns พร้อม count โดยมีค่า null อย่างน้อย 1 ค่า
data[data.columns[data.isnull().any()]].isnull().sum()
[ไม่บังคับ] 3. สำหรับการรับเปอร์เซ็นต์ของการนับ null
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
สร้างแผนที่บูลีน (ต้องเป็นอาร์เรย์จาก numpy เพื่อให้คุณสามารถส่งผ่านแอตทริบิวต์ค่า)
df[df.isna().values]
และนั่นคือทั้งหมด
df.isna().values
ส่งคืนเมทริกซ์ด้วยTrue
ที่ i, j iff df.iloc[i, j]
คือ NaN จากนั้นคุณใช้การสร้างดัชนีบูลีนกับเมทริกซ์ซึ่งแพนด้าเรียกdf.isna().values.nonzero()
ใช้ภายในและรับองค์ประกอบแรกของผลลัพธ์ โดยพื้นฐานแล้วคุณกำลังส่งคืนแถวทั้งหมดที่มี NaN
df.isna().any()[lambda x: x]
ทำงานให้ฉัน