<p>问题是在数据框中,列由对象填充,而不是数字</p>
<p>在代码中,如果转换字符串和数值,所有值都将转换为对象:</p>
<pre><code>fin = np.array(fin).T
</code></pre>
<p>解决方案是按列名称使用字典并传递到<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html" rel="nofollow noreferrer">^{<cd1>}</a>:</p>
<pre><code>df_disc = (pd.DataFrame(fin,columns=['Label','WoE','IV'])
.astype({'WoE':'float', 'IV':'float'}))
print(df_disc)
df_disc = df_disc.sort_values(by=['WoE'], ignore_index=True)
print(df_disc)
Label WoE IV
0 G -1.144166 0.290782
1 F -0.952214 0.290782
2 E -0.678466 0.290782
3 D -0.395001 0.290782
4 C -0.055251 0.290782
5 B 0.364043 0.290782
6 A 1.114730 0.290782
</code></pre>
<p>如果将字典传递给<code>DataFrame</code>构造函数,则可以防止它:</p>
<pre><code>df_disc = pd.DataFrame({'Label':lis,'WoE':woe,'IV':iv})
print(df_disc)
df_disc = df_disc.sort_values(by=['WoE'], ignore_index=True)
print(df_disc)
Label WoE IV
0 G -1.144166 0.290782
1 F -0.952214 0.290782
2 E -0.678466 0.290782
3 D -0.395001 0.290782
4 C -0.055251 0.290782
5 B 0.364043 0.290782
6 A 1.114730 0.290782
</code></pre>