ฉันจะรับจำนวนค่าที่หายไปในแต่ละแถวใน Pandas dataframe ได้อย่างไร ฉันต้องการแบ่งดาต้าไฟล์ให้เป็นดาต้าไฟล์อื่นที่มีจำนวนค่าหายไปเท่ากันในแต่ละแถว
ข้อเสนอแนะใด ๆ
ฉันจะรับจำนวนค่าที่หายไปในแต่ละแถวใน Pandas dataframe ได้อย่างไร ฉันต้องการแบ่งดาต้าไฟล์ให้เป็นดาต้าไฟล์อื่นที่มีจำนวนค่าหายไปเท่ากันในแต่ละแถว
ข้อเสนอแนะใด ๆ
คำตอบ:
คุณสามารถใช้การนับกับแถวเช่นนี้:
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
เมื่อใช้หมีแพนด้าพยายามหลีกเลี่ยงการดำเนินงานที่มีประสิทธิภาพในวงรวมทั้ง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
วิธีที่เรียบง่าย:
df.isnull().sum(axis=1)
หรือคุณสามารถใช้ประโยชน์จากวิธีการข้อมูลสำหรับวัตถุ dataframe:
df.info()
ซึ่งมีการนับจำนวนของค่าที่ไม่เป็นโมฆะสำหรับแต่ละคอลัมน์
ค่า Null ตามคอลัมน์
df.isnull().sum(axis=0)
ค่าว่างตามแนวคอลัมน์
c = (df == '').sum(axis=0)
ค่า Null ตลอดทั้งแถว
df.isnull().sum(axis=1)
ค่าว่างตามแนวแถว
c = (df == '').sum(axis=1)
ตัวอย่างนี้จะส่งคืนค่าจำนวนเต็มของจำนวนคอลัมน์ทั้งหมดที่มีค่าหายไป:
(df.isnull().sum() > 0).astype(np.int64).sum()
>>> 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
หากคุณต้องการนับจำนวนที่ขาดหายไป:
np.logical_not(df.isnull()).sum()