我无法访问包含nan
的索引位置的值,我想知道如何解决这个问题。(在我的项目中,这个索引有一个非常特殊的意义,我真的需要保留它,否则我需要进行一些肮脏的手动修改:“总是有一个解决方案”,即使它是一个非常糟糕的解决方案)
df
Out
temp_playlist objId
0 o1 [0, 6]
o2 [1, 4]
o3 [2, 5]
o4 [8, 9, 12]
o5 [10, 13]
o6 [11, 14]
NaN [3, 7]
Name: x, dtype: object
df.index
Out
MultiIndex([(0, 'o1'),
(0, 'o2'),
(0, 'o3'),
(0, 'o4'),
(0, 'o5'),
(0, 'o6'),
(0, nan)],
names=['temp_playlist', 'objId'])
现在我想以df.loc[(0, np.nan)]
的形式访问[3, 7]
值,并获得KeyError: (0, nan)
错误
仅从角度来看:[df.loc[idx] for idx in df.index if not pd.isna(idx[1])]
工作正常,因为我跳过了有问题的索引
我遗漏了什么?我如何解决这个问题
(Windows 10、python 3.8.5、pandas 1.3.1、numpy 1.20.3,报告给pandashere)
Idea将
NaN
替换为NA
:更新
我能够在分组和聚合数据帧后重现您的错误
不过,传递一个explit多索引是可行的
使用单个元组返回数据帧也是如此。注意使用
[[]]
返回一个数据帧与^{} 一样(另见user guide on reindexing)
再现错误的最初尝试
我无法重现你的错误。您可以在下面看到,使用
df.loc[(0, np.nan)]
是有效的然后我注意到你的索引被打印为
(0, nan)
,而我的是(0, np.nan)
。区别在于我使用了np.nan
,我怀疑你的是pd.NA
然而,这并没有解决分歧。我仍然能够使用
df.loc[(0, np.nan)]
此外,我还能够使用
df.loc[(0, None)]
只是确认一下,
np.nan
、pd.NA
和None
都是不同的对象。熊猫与DataFrame.loc
一起使用时,必须以同样的方式对待它们一个“糟糕的解决方案”不是真正解决根本问题,而是提供了一个有效的解决方案,它是通过将索引转换为字符串(这里
str
构造函数能够产生惊人的结果)相关问题 更多 >
编程相关推荐