错误:无法从 DataFrame 中删除无限值
Posted
技术标签:
【中文标题】错误:无法从 DataFrame 中删除无限值【英文标题】:Bug: impossible to delete infinite values from DataFrame 【发布时间】:2018-12-07 17:56:30 【问题描述】:这是我的数据框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 和无穷大有什么区别?另外,如何在np.all(np.isfinite(X))
中删除所有无限值以获取 True?
这是我尝试过的:
df = df.replace([np.inf, -np.inf], np.nan).dropna(how="all")
但infinite
的检查仍然给我 True。
此外,.apply(lambda s: s[np.isfinite(s)].dropna()).count()
给我的所有列的行数与简单的df.shape
相同,这表明缺少无限值。但在这种情况下,为什么np.all(np.isfinite(df))
返回 True?
【问题讨论】:
【参考方案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
【讨论】:
它与我在问题中发布的内容有何不同?这正是我尝试过的,但没有奏效。 不完全相同,因为:.dropna(subset=["col1", "col2"], how="all")
!= .dropna()
我应该提到所有的列吗?我可以.dropna(subset=df.columns, how="all")
吗?
我在帖子中添加了 Jupyter Notebook 的屏幕截图。
是的,你可以这样做:subset=df.columns以上是关于错误:无法从 DataFrame 中删除无限值的主要内容,如果未能解决你的问题,请参考以下文章
从 pandas DataFrame 中的多个字符串列中删除子字符串
Pyspark RDD 到具有强制模式的 DataFrame:值错误
根据列值有效地从宽 Spark Dataframe 中删除列
尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误