这是我的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
的支票仍然让我为真。
此外,.apply(lambda s: s[np.isfinite(s)].dropna()).count()
给我的所有列的行数与简单的df.shape
相同,这表明缺少无限值。但是在这种情况下,为什么np.all(np.isfinite(df))
返回True?
答案 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