ฟังก์ชัน 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() | NaN | np.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)