Ajuste gaussiano para Python

Estoy tratando de ajustar un gaussiano para mis datos (que ya es un gaussiano aproximado). Ya he tomado el consejo de los de aquí y lo he intentado.curve_fit yleastsq pero creo que me falta algo más fundamental (porque no tengo idea de cómo usar el comando). Aquí hay un vistazo al guión que tengo hasta ahora.

import pylab as plb
import matplotlib.pyplot as plt

# Read in data -- first 2 rows are header in this example. 
data = plb.loadtxt('part 2.csv', skiprows=2, delimiter=',')

x = data[:,2]
y = data[:,3]
mean = sum(x*y)
sigma = sum(y*(x - mean)**2)

def gauss_function(x, a, x0, sigma):
    return a*np.exp(-(x-x0)**2/(2*sigma**2))
popt, pcov = curve_fit(gauss_function, x, y, p0 = [1, mean, sigma])
plt.plot(x, gauss_function(x, *popt), label='fit')

# plot data

plt.plot(x, y,'b')

# Add some axis labels

plt.legend()
plt.title('Fig. 3 - Fit for Time Constant')
plt.xlabel('Time (s)')
plt.ylabel('Voltage (V)')
plt.show()

Lo que obtengo de esto es una forma gaussiana que es mi información original y una línea recta horizontal.

Además, me gustaría trazar mi gráfica usando puntos, en lugar de tenerlos conectados. Cualquier entrada es apreciada!