Python 提取数据帧中不浮动的索引值

Python 提取数据帧中不浮动的索引值,python,pandas,indexing,floating-point,extract,Python,Pandas,Indexing,Floating Point,Extract,我使用的数据帧预期只包含浮点型索引值,但我怀疑由于某种原因存在不同类型的值,从而导致索引的dtype='object'类型。我想提取不是float类型的索引值,看看是否是这种情况 范例 df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}, index=[0.0,1.5,'a']) 在这种情况下,提取的结果将是一个包含单个元素的列表['a']使用isinstance和map: idx = df.index[(df.index.map(lambda x:

我使用的数据帧预期只包含浮点型索引值,但我怀疑由于某种原因存在不同类型的值,从而导致索引的
dtype='object'
类型。我想提取不是float类型的索引值,看看是否是这种情况

范例

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}, index=[0.0,1.5,'a'])

在这种情况下,提取的结果将是一个包含单个元素的列表
['a']

使用
isinstance
map

idx = df.index[(df.index.map(lambda x: isinstance(x, float)) == False)]
print (idx)

Index(['a'], dtype='object')

你想知道你有什么样的虚假数据吗?如果是这样,这就足够了

df.index[df.index.str[0].notna()]
Index(['a'], dtype='object')
假设您有字符串条目,任何非字符串的内容都将显示为NaN

如果要清除无效数据,请尝试将其强制为浮动,并清除NaN行

m = pd.to_numeric(df.index, errors='coerce').notna()  #.notnull()
df[m]
     a  b
0.0  1  4
1.5  2  5

具有列表理解功能-根据ColdSpeed建议更新:

[x for x in df.index if not isinstance(x, float)]

您可以使用
collections.defaultdict
创建映射到值的类型字典:

from collections import defaultdict

df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [4,5,6,7,8]},
                  index=[0.0,1.5,'a',pd.to_datetime('10/05/2018'),'b'])

vals = pd.to_numeric(df.index, errors='coerce')
idx = df.index[vals.isnull()]

d = defaultdict(list)

for x in idx:
    d[type(x)].append(x)
然后,例如,您可以使用
d.keys()
提取所有非数字类型,或者使用
d[str]
提取字符串索引

结果

print(d)

defaultdict(list,
            {str: ['a', 'b'],
             pandas._libs.tslibs.timestamps.Timestamp: [Timestamp('2018-10-05 00:00:00')]})

这是出于正确的精神,但您应该始终错误地使用
isinstance
,而不是对
类型
@coldspeed进行相等比较感谢您的提示!非常感谢。这对性能有好处吗?这被认为是更好的做法,而且更具python风格。我想调查那里有什么样的数据不同于float,如果可能的话,这些数据点的确切类型是什么。@KrzysztofSłowiński您可以将第一行代码修改为
np.unique(list(map(type,df.index[df.index.str[0].notna()))
要返回类似于
[str,…]
的内容,它是否只能处理字符串类型?@KrzysztofSłowiński No应该适用于任何情况
str
是我键入的,因为这就是您给出的示例中的内容。