Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - ตรวจสอบค่า Infinity (Inf) ใน Pandas DataFrame ด้วย np.isinf

ฟังก์ชัน numpy.isinf() ตรวจสอบค่า Infinity (บวกหรือลบ) ในอาร์เรย์หรือ DataFrame คืนค่า Boolean Array รวมกับ .sum() เพื่อนับจำนวนค่า Inf

ขั้นตอนการทำงาน

1. นำเข้าไลบรารี

import pandas as pd
import numpy as np

2. สร้าง DataFrame มีค่า Inf

d = {
    "Reg_Price": [7000.5057, np.inf, 5000, np.inf, 9000.75768, 6000]
}
dataFrame = pd.DataFrame(d)

3. ตรวจสอบและนับค่า Inf

# ตรวจสอบทุกค่า
inf_mask = np.isinf(dataFrame)
print(inf_mask)

# นับจำนวนค่า Inf ทั้ง DataFrame
count = np.isinf(dataFrame).values.sum()
print(f"Infinity values: {count}")

# นับต่อคอลัมน์
col_counts = np.isinf(dataFrame).sum()
print(col_counts)

โค้ดตัวอย่างสมบูรณ์

import pandas as pd
import numpy as np

d = {
    "Reg_Price": [7000.5057, np.inf, 5000, np.inf, 9000.75768, 6000]
}
dataFrame = pd.DataFrame(d)
print("DataFrame:\n", dataFrame)

# ตรวจสอบและนับ Infinity
count = np.isinf(dataFrame).values.sum()
print(f"\nInfinity values count: {count}")

# แสดงตำแหน่งที่เป็น Inf
inf_locations = np.where(np.isinf(dataFrame))
print(f"Inf locations (row, col): {list(zip(*inf_locations))}")

ผลลัพธ์

DataFrame:
      Reg_Price
0  7000.505700
1         inf
2  5000.000000
3         inf
4  9000.757680
5  6000.000000

Infinity values count: 2

Inf locations (row, col): [(1, 0), (3, 0)]

ฟังก์ชันตรวจสอบค่าพิเศษ NumPy

ฟังก์ชันตรวจสอบคู่คู่
np.isinf()Infinity (±inf)np.isfinite()
np.isnan()NaNnp.isfinite() (รวม inf)
np.isneginf()-inf เท่านั้น-
np.isposinf()+inf เท่านั้น-

การจัดการค่า Infinity

# 1. แทนที่ Inf ด้วย NaN
df.replace([np.inf, -np.inf], np.nan, inplace=True)

# 2. ลบแถวที่มี Inf
df = df[np.isfinite(df).all(axis=1)]

# 3. Clip ค่าสูงสุด/ต่ำสุด
df['col'] = df['col'].clip(lower=-1e10, upper=1e10)

# 4. ใช้ mask
df = df.mask(np.isinf(df))  # Inf → NaN

Pandas Native Methods (v1.5+)

# ตรวจสอบ Inf
df.isin([np.inf, -np.inf])

# หรือใช้ applymap (ช้ากว่า)
df.applymap(np.isinf)

แหล่งที่มาของ Infinity

  • หารศูนย์: 1.0 / 0.0 → inf
  • Log ของศูนย์/ติดลบ: np.log(0) → -inf
  • Overflow: np.exp(1000) → inf
  • การคำนวณสถิติบางแบบ (เช่น division by zero ใน groupby)