Problem with binning
The two methods you're citing belong to what is called unsupervised binning, including as you said equal width and equal frequency binning. On the other hand, supervised binning broadly tries to make sure bins are made in majority of instances sharing the same class label.
For both types of unsupervised binning, i.e. equal frequency and equal width, the best way is still to give it a try and select based on the observation of the resulting histogram you get. If your data is not properly divided by bins of equal frequency, maybe equal width bins would help, and vice versa.
For what concerns Pandas execution, you can pass a precision argument to qcut, this should return more &quot;comprehensible&quot; bin limits, as shown below
&gt;&gt;&gt; array = np.random.randn(10)

&gt;&gt;&gt; pd.qcut(array, q=4, precision=3)
Categories (4, interval[float64]): [(-1.8889999999999998, -0.732] &lt; (-0.732, 
-0.136] &lt; (-0.136, 0.973] &lt; (0.973, 1.543]]

&gt;&gt;&gt; pd.qcut(array, q=4, precision=0)
Categories (4, interval[float64]): [(-3.0, -1.0] &lt; (-1.0, -0.0] &lt; (-0.0, 1.0] 
&lt; (1.0, 2.0]]