Recently, I was working on a data analysis project where I needed to process mathematical formulas stored as strings in a CSV file. The challenge was clear – I needed to convert these string representations into actual mathematical expressions that Python could evaluate.
Python offers several ways to accomplish this task. In this article, I’ll share five practical methods to convert strings to mathematical expressions in Python, complete with examples and code snippets you can use right away.
So let’s dive in!
Convert String to Mathematical Expression
Now, I will explain how to convert a string to a mathematical expression using various methods:
Read Convert String to UUID in Python
Method 1: Use the eval() Function
The simplest way to convert a string to a mathematical expression is to use Python’s built-in eval() function.
Here’s how you can use it:
# Basic arithmetic using eval()
expression = "3 * (4 + 5)"
result = eval(expression)
print(result)
# Using variables
x = 10
y = 5
expression = "x * y + 2"
result = eval(expression)
print(result)Output:
27
52I executed the above example code and added the screenshot below.

The eval() function evaluates the string as a Python expression and returns the result. It’s incredibly versatile and can handle complex expressions.
However, there’s an important security consideration: eval() can execute any Python code, not just mathematical expressions. This makes it potentially dangerous when used with user input or external data.
Check out Convert Multiline String to Single Line in Python
Method 2: Use the safer ast.literal_eval()
If security is a concern, Python’s ast.literal_eval() method provides a safer alternative to eval(). It only evaluates literals like numbers, strings, lists, dictionaries, etc., but not arbitrary expressions.
import ast
# Safe for literals
expression = "123 + 456"
try:
result = ast.literal_eval(expression)
print(result)
except:
print("Cannot evaluate this expression with literal_eval")
# Works with literals
literal = "123"
result = ast.literal_eval(literal)
print(result)Output:
Cannot evaluate this expression with literal_eval
123I executed the above example code and added the screenshot below.

While ast.literal_eval() is safer, it can’t evaluate mathematical expressions directly, which limits its usefulness for our specific task.
Read String With NewLine in Python
Method 3: Use the numexpr Library
For more complex mathematical expressions, especially those involving Python arrays or large datasets, the numexpr library offers better performance and security than eval().
import numexpr as ne
import numpy as np
# Simple expression
expression = "3 * (4 + 5)"
result = ne.evaluate(expression)
print(result)
# With arrays
x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])
result = ne.evaluate("x * y + 2")
print(result)Output:
27
[7 10 11 10 7]I executed the above example code and added the screenshot below.

The numexpr library is particularly useful for numerical computations as it can optimize the evaluation of expressions, making it faster than eval() for large datasets.
Check out Convert String To Byte Array Python
Method 4: Use the sympy Library for Symbolic Mathematics
If you’re working with symbolic mathematics, the Python sympy library provides efficient capabilities for converting strings to mathematical expressions that can be manipulated symbolically.
import sympy as sp
from sympy.parsing.sympy_parser import parse_expr
# Define symbolic variables
x, y = sp.symbols('x y')
# Parse expression
expression = "x**2 + 2*x*y + y**2"
expr = parse_expr(expression)
print(expr) # Output: x**2 + 2*x*y + y**2
# Substitute values
result = expr.subs({x: 2, y: 3})
print(result) # Output: 25
# Symbolic operations
derivative = sp.diff(expr, x)
print(derivative) # Output: 2*x + 2*yThe sympy library is particularly useful when you need to perform symbolic operations like differentiation, integration, or solving equations.
Read Add Characters to an Empty String in Python
Method 5: Create a Custom Parser with regex and operator
For cases where you need more control over the parsing process or want to implement specific rules, you can create a custom parser using regular expressions and the operator module.
import re
import operator
def evaluate_expression(expression):
# Define operators and their corresponding functions
operators = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv
}
# Parse the expression (simple case for demonstration)
# This only handles simple expressions like "5 + 3" or "10 * 2"
match = re.match(r'(\d+)\s*([+\-*/])\s*(\d+)', expression)
if match:
num1 = int(match.group(1))
op = match.group(2)
num2 = int(match.group(3))
return operators[op](num1, num2)
else:
raise ValueError("Expression format not supported")
# Test the custom parser
print(evaluate_expression("5 + 3")) # Output: 8
print(evaluate_expression("10 * 2")) # Output: 20This is a simplified example. For real-world applications, you might want to use a more sophisticated parsing approach, such as implementing a proper expression parser using techniques like the Shunting Yard algorithm.
Check out Different Ways to Create Strings in Python
Real-World Example: Calculating Sales Tax in Different States
Let’s look at a practical example where we might use these techniques. Imagine we’re building a tool for an e-commerce platform that calculates sales tax based on different state formulas stored as strings.
import numexpr as ne
# Dictionary of state tax formulas as strings
tax_formulas = {
"California": "subtotal * 0.0725 + (county_rate * subtotal)",
"New York": "subtotal * 0.045 + (city_rate * subtotal)",
"Texas": "subtotal * 0.0625",
"Florida": "subtotal * 0.06"
}
# Calculate tax for an order
def calculate_tax(state, subtotal, county_rate=0, city_rate=0):
if state not in tax_formulas:
return "State not found"
formula = tax_formulas[state]
# Using numexpr for safe evaluation
tax = float(ne.evaluate(formula))
return round(tax, 2)
# Example usage
order_subtotal = 100.00
print(f"Tax in California (LA County, rate 0.01): ${calculate_tax('California', order_subtotal, county_rate=0.01)}")
print(f"Tax in New York City (city rate 0.045): ${calculate_tax('New York', order_subtotal, city_rate=0.045)}")
print(f"Tax in Texas: ${calculate_tax('Texas', order_subtotal)}")This example demonstrates how converting string formulas to mathematical expressions can create a flexible system for calculating varying tax rates across different states.
Read Count Numbers in a String in Python
Performance Comparison
When choosing a method, performance might be an important consideration. Here’s a quick comparison of the performance of different methods:
import time
import numexpr as ne
from sympy.parsing.sympy_parser import parse_expr
import sympy as sp
# Test expression
expression = "3 * (4 + 5) ** 2"
x, y = sp.symbols('x y')
# Timing eval()
start = time.time()
for _ in range(10000):
result = eval(expression)
print(f"eval(): {time.time() - start:.6f} seconds")
# Timing numexpr
start = time.time()
for _ in range(10000):
result = ne.evaluate(expression)
print(f"numexpr: {time.time() - start:.6f} seconds")
# Timing sympy
start = time.time()
expr = parse_expr(expression)
for _ in range(10000):
result = expr.evalf()
print(f"sympy: {time.time() - start:.6f} seconds")For simple expressions, eval() might be faster, but for complex expressions or operations on large arrays, numexpr usually performs better. sympy is generally slower but offers symbolic manipulation capabilities.
I hope you found this article helpful! Converting strings to mathematical expressions is a powerful technique that can add flexibility to your Python applications. Whether you’re building a calculator, a data analysis tool, or a scientific application, these methods will enable you to work with formulas stored as strings.
Remember to consider security implications when choosing your method, especially if you’re working with user input or external data. The eval() function is powerful but should be used with caution, while alternatives like numexpr offer better security with good performance.
You can also read string-related tutorials:
- Remove Substring From String in Python if it Exists
- Perform String Slicing in Python
- Remove a Newline from the String

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.