提取不在熊猫中浮动的DataFrame索引值

时间:2018-08-27 07:58:40

标签: python pandas indexing floating-point extract

我正在使用一个预期仅包含浮点类型索引值的DataFrame,但是我怀疑由于某种原因,存在其他类型的值,从而导致索引的dtype='object'类型。我想提取不是浮点类型的索引值,看看是否是这种情况。

示例

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

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

4 个答案:

答案 0 :(得分:4)

您是否只想弄清楚您拥有哪种假数据?如果是这样,就足够了。

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

答案 1 :(得分:3)

isinstancemap一起使用:

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

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

答案 2 :(得分:2)

具有列表理解功能-根据Coldspeeds建议进行了更新:

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

答案 3 :(得分:1)

您可以使用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')]})