Replace NaN with zero and fill negative infinity values in Python

In NumPy, you can handle NaN and infinity values using the numpy.nan_to_num() method. This function replaces NaN with zero and infinity values with large finite numbers, making your data suitable for mathematical operations.

Syntax

numpy.nan_to_num(x, copy=True, nan=0.0, posinf=None, neginf=None)

Parameters

Parameter Description Default
x Input array Required
copy Whether to create a copy or modify in-place True
nan Value to replace NaN with 0.0
posinf Value to replace positive infinity with Very large number
neginf Value to replace negative infinity with Very small number

Basic Example

Let's create an array with NaN and infinity values and clean them ?

import numpy as np

# Create array with problematic values
arr = np.array([np.inf, -np.inf, np.nan, -128, 128])
print("Original Array:")
print(arr)

# Replace NaN and infinity values
cleaned = np.nan_to_num(arr)
print("\nCleaned Array:")
print(cleaned)
Original Array:
[ inf -inf  nan -128.  128.]

Cleaned Array:
[ 1.79769313e+308 -1.79769313e+308  0.00000000e+000 -1.28000000e+002
  1.28000000e+002]

Custom Replacement Values

You can specify custom values for NaN and infinity replacements ?

import numpy as np

arr = np.array([np.inf, -np.inf, np.nan, 5.5, -3.2])
print("Original Array:")
print(arr)

# Custom replacement values
result = np.nan_to_num(arr, nan=999, posinf=1000, neginf=-1000)
print("\nWith Custom Values:")
print(result)
Original Array:
[ inf -inf  nan  5.5 -3.2]

With Custom Values:
[ 1.00000000e+03 -1.00000000e+03  9.99000000e+02  5.50000000e+00
 -3.20000000e+00]

In-place Modification

Use copy=False to modify the original array directly ?

import numpy as np

arr = np.array([np.nan, np.inf, -np.inf, 42.0])
print("Before modification:")
print(arr)
print("Array ID:", id(arr))

# Modify in-place
np.nan_to_num(arr, copy=False, nan=0, posinf=100, neginf=-100)
print("\nAfter in-place modification:")
print(arr)
print("Array ID:", id(arr))  # Same ID confirms in-place operation
Before modification:
[ nan  inf -inf  42.]
Array ID: 140234567890123

After in-place modification:
[   0.  100. -100.   42.]
Array ID: 140234567890123

Practical Use Case

This is especially useful when cleaning data for machine learning ?

import numpy as np

# Simulated sensor data with missing/invalid readings
sensor_data = np.array([23.5, np.nan, np.inf, 24.1, -np.inf, 22.8, np.nan])
print("Raw sensor data:")
print(sensor_data)

# Clean the data for analysis
clean_data = np.nan_to_num(sensor_data, nan=23.0, posinf=30.0, neginf=15.0)
print("\nCleaned sensor data:")
print(clean_data)
print(f"Mean temperature: {clean_data.mean():.2f}")
Raw sensor data:
[23.5  nan  inf 24.1 -inf 22.8  nan]

Cleaned sensor data:
[23.5 23.  30.  24.1 15.  22.8 23. ]
Mean temperature: 23.06

Conclusion

The numpy.nan_to_num() function is essential for data preprocessing, converting problematic NaN and infinity values into workable numbers. Use custom replacement values when you need specific behavior for your data analysis.

Updated on: 2026-03-26T19:54:28+05:30

647 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements