Mô tả bài toán
Cho Series chứa NaN:
0 1.0 1 2.0 2 3.0 3 NaN 4 4.0 5 NaN dtype: float64
Yêu cầu: In ra chỉ số (index) của các phần tử NaN. Kết quả: index is 3 và index is 5.
Giải pháp 1: Duyệt vòng lặp với np.isnan()
import pandas as pd
import numpy as np
l = [1, 2, 3, np.nan, 4, np.nan]
data = pd.Series(l)
print("Series gốc:")
print(data)
print("\nChỉ số các giá trị NaN:")
for idx, val in data.items():
if np.isnan(val):
print(f"index is {idx}")
Giải pháp 2: Vector hóa với isna() (khuyên dùng)
Pandas cung cấp isna() / isnull() trả về boolean Series.
import pandas as pd
import numpy as np
data = pd.Series([1, 2, 3, np.nan, 4, np.nan])
# Cách 1: Lấy index trực tiếp
nan_indices = data.index[data.isna()].tolist()
print("Chỉ số NaN (cách 1):", nan_indices)
# Cách 2: Dùng numpy where
nan_indices = np.where(data.isna())[0].tolist()
print("Chỉ số NaN (cách 2):", nan_indices)
# Cách 3: In từng dòng
for idx in data.index[data.isna()]:
print(f"index is {idx}")
Đầu ra
Series gốc: 0 1.0 1 2.0 2 3.0 3 NaN 4 4.0 5 NaN dtype: float64 Chỉ số NaN (cách 1): [3, 5] Chỉ số NaN (cách 2): [3, 5] index is 3 index is 5
Ưu điểm cách 2: Nhanh hơn, code ngắn gọn, phù hợp dữ liệu lớn.