Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
