错误:无法从DataFrame删除无限值

时间:2018-06-28 15:19:55

标签: python pandas

这是我的DataFrame df

col1       col2
-0.441406  2.523047
-0.321105  1.555589 
-0.412857  2.223047
-0.356610  2.513048

当我检查df时,发现有一些无限值。

np.any(np.isnan(df))
np.all(np.isfinite(df))

False 
True

NaN和Infinite有什么区别?另外,如何删除所有无限值以在np.all(np.isfinite(X))中获得True?

这是我尝试过的:

df = df.replace([np.inf, -np.inf], np.nan).dropna(how="all")

但是infinite的支票仍然让我为真。

enter image description here

此外,.apply(lambda s: s[np.isfinite(s)].dropna()).count()给我的所有列的行数与简单的df.shape相同,这表明缺少无限值。但是在这种情况下,为什么np.all(np.isfinite(df))返回True?

1 个答案:

答案 0 :(得分:1)

您的问题类似于dropping infinite values from dataframes in pandas?, 您是否尝试过:

df.replace([np.inf, -np.inf], np.nan).dropna(subset=["col1", "col2"], how="all")

np.nan不被视为finite,您可以将np.nan替换为任何有限的number,例如,请参见以下代码:


import pandas as pd
import numpy as np

df = pd.DataFrame(columns=list('ABC'))
df.loc[0] = [1,np.inf,-np.inf]
print df

print np.all(np.isfinite(df))

df_nan = df.replace([np.inf, -np.inf], np.nan).dropna(subset=df.columns, how="all")
print df_nan

print np.all(np.isfinite(df_nan))

df_0 = df.replace([np.inf, -np.inf], 0).dropna(subset=df.columns, how="all")
print df_0

print np.all(np.isfinite(df_0))

结果:

     A    B    C
0  1.0  inf -inf
False
     A   B   C
0  1.0 NaN NaN
False
     A    B    C
0  1.0  0.0  0.0
True