Pandas: Remove all non-numeric elements from a Series (3 examples)

Updated: March 2, 2024 By: Guest Contributor Post a comment

Pandas, a powerful and flexible open-source data manipulation tool in Python, is widely used in handling, analyzing, and processing structured data. One common task when working with Pandas Series is cleansing the data to ensure that it contains only numeric values, especially when performing numerical computations or visualizations. This tutorial will guide you through three examples of removing non-numeric elements from a Pandas Series, ranging from basic techniques to more advanced methods.

Getting Started

First, ensure you have Pandas installed in your environment. If not, you can install it using pip:

pip install pandas

Example 1: Basic Filtering

In our first example, we’ll start with a simple approach by filtering out non-numeric values using the pd.to_numeric() function with the errors='coerce' parameter. This method attempts to convert non-numeric values to NaN (Not a Number), which we can then drop from the Series.

import pandas as pd

# Sample Series with mixed data types
s = pd.Series(['10', '20', 'abc', '30', 'xyz', 1.5, 100])

# Convert non-numeric to NaN and drop them
s_numeric = pd.to_numeric(s, errors='coerce').dropna()

# Display the result
print(s_numeric)

Output:

0     10.0
1     20.0
3     30.0
5      1.5
6    100.0
dtype: float64

Example 2: Using Regular Expressions

Building on the basic approach, our next example involves using regular expressions to identify numeric values. This method provides more flexibility and control over what is considered a numeric value.

import pandas as pd

# Sample Series
s = pd.Series(['10', '20', '-30.5', 'nan', '100%', '5e3'])

# Extract numeric values using regular expressions
s_numeric = s.str.extract(r'(^[-+]?\d*\.?\d+(?:e[\+\-]?\d+)?)')[0].dropna()

# Convert to numeric type
s_numeric = pd.to_numeric(s_numeric)

# Display the result
print(s_numeric)

Output:

0       10.0
1       20.0
2      -30.5
5     5000.0
dtype: float64

Example 3: Custom Function for Complex Filtering

For our final example, we’ll create a custom function to remove non-numeric elements from a Series. This approach allows for intricate logic that can handle various edge cases not covered by previous methods.

import pandas as pd

# Define the custom function
def remove_non_numeric(series):
    return series[np.array([str(x).replace('.', '', 1).isdigit() for x in series])]

# Sample Series
s = pd.Series(['100', 'Unknown', '200.5', '-300', 'NaN'])

# Applying custom function
s_numeric = remove_non_numeric(s)

# Display the result
print(s_numeric)

Output:

0      100
2    200.5
3     -300
dtype: float64

Conclusion

Through these examples, we demonstrated basic to advanced methods for removing non-numeric elements from a Pandas Series. The choice of technique depends on the specific requirements of your dataset and the nature of non-numeric data you’re dealing with. With these tools, you can ensure that your Pandas Series contains clean, numeric data suitable for further analysis or visualization tasks.