Python直方图 ValueError: 范围参数必须是有限的。

8
使用直方图绘制Pandas数据帧时,样本数据如下:
     distance
0    5.680195
2    0.000000
3    7.974658
4    2.461387
5    9.703089

我用来绘图的代码

import matplotlib.pyplot as plt

plt.hist(df['distance'].values)
plt.show()

我遇到了这个错误。
"ValueError: range parameter must be finite."  

my attempt

df['Round_Distance'] = df['distance'].round(1)

0    5.7
2    0.0
3    8.0
4    2.5
5    9.7

重新绘制图表,出现新的错误。

plt.hist(df['Round_Distance'].values)
plt.show()

ValueError: max must be larger than min in range parameter.

奇怪的是,我使用的解决方法如下,在不使用ROUND的情况下。
df['distance'].hist(bins=[0,25,50,75,100,125,150,175], color='g')
4个回答

18

听起来你的实际数据中有一些NaNsinf。 你可以像这样只选择那些有限的值:

import numpy as np

df[np.isfinite(df['distance'])]

那么你可以这样获得你的情节:

plt.hist(df[np.isfinite(df['distance'])].values)

1
很奇怪...不应该花太长时间。但是如果没有看到更多的情况,我就不能提供太多帮助。只执行 df[np.isfinite(df['distance'])] 需要多长时间?它应该非常快... - sacuL
你可以创建一些带有NaN或inf的样本数据,然后绘制图表以查看是否有效。 - Learn
1
是的,我用了10000个点,只花了一小部分时间:df = pd.DataFrame({'distance':np.random.choice(np.concatenate([np.linspace(0,10,1000), np.array([np.nan]), np.array([np.inf])]), 1000000)}) - sacuL

5

在sacul的答案中补充一点,您可以使用以下代码检查任何列中是否存在 NaNinf :

对于 NaN :

df.isnull().sum()

对于 inf

df.max()

希望这有所帮助!

1

NaN导致了这个问题,我不需要四舍五入,只需删除NaN,然后它就能正常工作。

plt.hist(df['distance'].dropna().values)
plt.show()

1

确保数据不包含以下内容:

  1. Null/None
  2. ""/空字符串
  3. 太多的零(0)
  4. float('inf') 或 float('-inf')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接