Because of the noise in the experimental data, I thought it would be easier to work with np.interp() to interpolate the data:
x = np.linspace(0, 32, 100)
interCurve = np.interp(x, bias_voltage, dark_current)
derivB = np.gradient(interCurve[:-1], x[:-1])
plt.plot(x, interCurve, label='interpolated curve')
plt.scatter(bias_voltage, dark_current, marker='x', color='g', s=6, label='experimental points')
plt.plot(x[:-1], derivB, label='derivative of interpolated curve')
plt.legend()
plt.show()