Depending on your end use, it may be worthwhile considering LOWESS (Locally Weighted Scatterplot Smoothing) to remove noise. I've used it successfully with repeated measures datasets.
More information on local regression methods, including LOWESS and LOESS, here.
Using the example data from @lyken-syu for consistency with other answers:
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 0, 500
x = np.arange(1, 100, 0.1) # x axis
z = np.random.normal(mu, sigma, len(x)) # noise
y = x ** 2 + z # signal + noise
plt.plot(x, y, linewidth = 2, linestyle = "-", c = "b") # includes some noise
plt.show()

Here is how to apply the LOWESS technique using the statsmodels implementation:
import statsmodels.api as sm
y_lowess = sm.nonparametric.lowess(y, x, frac = 0.3) # 30 % lowess smoothing
plt.plot(y_lowess[:, 0], y_lowess[:, 1], 'b') # some noise removed
plt.show()

It may be necessary to vary the frac
parameter, which is the fraction of the data used when estimating each y value. Increase the frac
value to increase the amount of smoothing. The frac
value must be between 0 and 1.
Further details on statsmodels lowess usage.
Sometimes a simple rolling mean may be all that is necessary.
For example, using pandas with a window size of 30:
import pandas as pd
df = pd.DataFrame(y, x)
df_mva = df.rolling(30).mean() # moving average with a window size of 30
df_mva.plot(legend = False);

You will probably have to try several window sizes with your data.
Note that the first 30 values of df_mva
will be NaN
but these can be removed with the dropna
method.
Usage details for the pandas rolling function.
Finally, interpolation can be used for noise reduction through smoothing.
Here is an example of radial basis function interpolation from scipy:
from scipy.interpolate import Rbf
rbf = Rbf(x, y, function = 'quintic', smooth = 10)
xnew = np.linspace(x.min(), x.max(), num = 100, endpoint = True)
ynew = rbf(xnew)
plt.plot(xnew, ynew)
plt.show()

Smoother approximation can be achieved by increasing the smooth
parameter. Alternative function
parameters to consider include 'cubic' and 'thin_plate'. When considering the function
value, I usually try 'thin_plate' first followed by 'cubic'; 'thin_plate' gave good results but required a very high smooth
value with this dataset and 'cubic' seemed to struggle with the noise.
Check other Rbf
options in the scipy docs. Scipy provides other univariate and multivariate interpolation techniques (see this tutorial).
Both LOWESS and rolling mean methods will give better results if your data is sampled at a regular interval.
Radial basis function interpolation may be overkill for this dataset, but it's definitely worth your attention if your data is higher dimensional and/or not sampled on a regular grid.
Care must be taken with all these methods; it's easy to remove too much noise and distort the underlying signal.