จะนับจำนวนของค่าที่หายไปในแต่ละแถวใน Pandas dataframe ได้อย่างไร


17

ฉันจะรับจำนวนค่าที่หายไปในแต่ละแถวใน Pandas dataframe ได้อย่างไร ฉันต้องการแบ่งดาต้าไฟล์ให้เป็นดาต้าไฟล์อื่นที่มีจำนวนค่าหายไปเท่ากันในแต่ละแถว

ข้อเสนอแนะใด ๆ

คำตอบ:


19

คุณสามารถใช้การนับกับแถวเช่นนี้:

test_df.apply(lambda x: x.count(), axis=1)

test_df:

    A   B   C
0:  1   1   3
1:  2   nan nan
2:  nan nan nan

เอาท์พุท:

0:  3
1:  1
2:  0

คุณสามารถเพิ่มผลลัพธ์เป็นคอลัมน์เช่นนี้:

test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)

ผลลัพธ์:

    A   B   C   full_count
0:  1   1   3   3
1:  2   nan nan 1
2:  nan nan nan 0

ทำงานอย่างสมบูรณ์แบบ! ขอบคุณ.
Kaggle

41

เมื่อใช้หมีแพนด้าพยายามหลีกเลี่ยงการดำเนินงานที่มีประสิทธิภาพในวงรวมทั้งapply, map, applymapฯลฯ นั่นช้า!

หากคุณต้องการนับค่าที่ขาดหายไปในแต่ละคอลัมน์ลอง:

df.isnull().sum() หรือ df.isnull().sum(axis=0)

ในอีกทางหนึ่งคุณสามารถนับในแต่ละแถว (ซึ่งเป็นคำถามของคุณ) โดย:

df.isnull().sum(axis=1)

มันเร็วกว่าโซลูชันของ Jan van der Vegt ประมาณ 10 เท่า (เขานับจำนวนค่าที่ถูกต้องมากกว่าค่าที่หายไป):

In [18]: %timeit -n 1000 df.apply(lambda x: x.count(), axis=1)
1000 loops, best of 3: 3.31 ms per loop

In [19]: %timeit -n 1000 df.isnull().sum(axis=1)
1000 loops, best of 3: 329 µs per loop


4

หรือคุณสามารถใช้ประโยชน์จากวิธีการข้อมูลสำหรับวัตถุ dataframe:

df.info()

ซึ่งมีการนับจำนวนของค่าที่ไม่เป็นโมฆะสำหรับแต่ละคอลัมน์


2

ค่า Null ตามคอลัมน์

df.isnull().sum(axis=0)

ค่าว่างตามแนวคอลัมน์

c = (df == '').sum(axis=0)

ค่า Null ตลอดทั้งแถว

df.isnull().sum(axis=1)

ค่าว่างตามแนวแถว

c = (df == '').sum(axis=1)


-1
>>> df = pd.DataFrame([[1, 2, np.nan],
...                    [np.nan, 3, 4],
...                    [1, 2,      3]])

>>> df
    0  1   2
0   1  2 NaN
1 NaN  3   4
2   1  2   3

>>> df.count(axis=1)
0    2
1    2
2    3
dtype: int64

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.