python - 我的数据框中的值如何同时为 NaN 和浮动
问题描述
我正在尝试从 sklearn 运行 PCA,但我不断得到ValueError: Input contains NaN, infinity or a value too large for dtype('float64')
. 我很惊讶,因为我使用过df.dropna()
,并且len(df)
在使用后从 4096 变为 1566 drop.na()
。
我尝试了很多事情,比如重置索引、制作显式副本等,但没有任何效果。下面的示例将演示一个对我来说似乎很奇怪的行为的最小示例。
df_test = pd.DataFrame([[0.11, 0.22],[1.11, 1.22]], columns=['s1', 's2'])
当我做
df_test[df_test.isna()]
我得到:
s1 s2
0 NaN NaN
1 NaN NaN
什么时候:
df_test[~df_test.isna()]
我得到:
s1 s2
0 0.11 0.22
1 1.11 1.22
我的期望
df_test[df_test.isna()]
是:
s1 s2
没有行。我的单元格中的值如何同时成为有效的 float64 和 NaN,这相当令人困惑......
UDPATE:原来在运行 PCA 时 NaN 不是问题,但实际上有 2 个无穷大值爬入我的数据中,直到我意识到 NaN 一直被正确处理之前,我没有在我的 4096 x 15 数据帧中发现它。感谢所有回复!
解决方案
当 you 时df_test.isna()
,它会创建一个布尔掩码。
>>> df_test.isna()
s1 s2
0 False False
1 False False
现在,当您使用此掩码进行过滤时,它将返回一个NaN
.
>>> df_test[df_test.isna()]
s1 s2
0 NaN NaN
1 NaN NaN
如果你不想要,NaN
那么就把它们放下。
how
当我们至少有一个 NA 或全部 NA 时,该参数确定是否从 DataFrame 中删除行或列。'any' :如果存在任何 NA 值,则删除该行或列。
'all' :如果所有值都是 NA,则删除该行或列。
>>> df_test[df_test.isna()].dropna(how='all') # Depends on the situation
Empty DataFrame
Columns: [s1, s2]
Index: []
推荐阅读
- sql-server - 仅检索匹配的 1 行的联接查询
- java - 编译 Flink 失败,因为快照依赖
- xamarin - 从 ViewModel 类动态返回颜色
- c# - Kestrel 将传入的同时请求堆积起来,直到所有请求都堆积起来才读取它们
- json - 使用 Rxjs 访问嵌套的 json
- java - 无法将 VisualVMLauncher 与 IntelliJ Idea 一起使用
- java - 超类的字段为空
- php - 显示 PHP- 调试,但函数未完全执行,控制台中没有错误
- azure-devops - Azure DevOps 构建中的错误 - 您是否缺少程序集参考?
- ios - 如何判断我是否使用同一个项目来填充多个 UICollectionViewCell?