Python 标准化时出现值错误:数组不能包含INF或NAN
我正在尝试使用“Python 标准化时出现值错误:数组不能包含INF或NAN,python,pandas,data-structures,Python,Pandas,Data Structures,我正在尝试使用“.apply(np.log10)”对数据进行标准化,但在标准化后,一些行变成了-inf。由于我想绘制标准化后数据的分布,我想知道是否有人可以帮助我完成以下工作: 1-如何使用Pandas删除包含NAN或inf的行? 2-解释为什么会发生这种情况。通常会发生inf,因为你除以零。因为您使用的是日志,所以如果日志为零,则会得到inf 您可以删除包含NAN和INF的所有行,如下所示: np.random.seed(0) df = pd.DataFrame(np.random.randn
.apply(np.log10)
”对数据进行标准化,但在标准化后,一些行变成了-inf。由于我想绘制标准化后数据的分布,我想知道是否有人可以帮助我完成以下工作:
1-如何使用Pandas删除包含NAN或inf的行?
2-解释为什么会发生这种情况。通常会发生
inf
,因为你除以零。因为您使用的是日志,所以如果日志为零,则会得到inf
您可以删除包含NAN和INF的所有行,如下所示:
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
df.iat[0, 0] /= 0 # Add an inf
df.iat[-1, -1] = np.nan # Add a NaN
>>> df
A B C
0 inf 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
4 0.761038 0.121675 NaN
>>> df[df.apply(np.isfinite).all(axis=1)]
A B C
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
inf
通常是因为被零除而发生的。因为您使用的是日志,所以如果日志为零,则会得到inf
您可以删除包含NAN和INF的所有行,如下所示:
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
df.iat[0, 0] /= 0 # Add an inf
df.iat[-1, -1] = np.nan # Add a NaN
>>> df
A B C
0 inf 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
4 0.761038 0.121675 NaN
>>> df[df.apply(np.isfinite).all(axis=1)]
A B C
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
调用
dropna
或np.log10(df.dropna())
应该工作调用dropna
或np.log10(df.dropna())
应该工作