0

是否可以检查熊猫数据框是否已编入索引?检查是否DataFrame.set_index(...)曾经在数据帧上调用过?我可以检查是否df.index是一个数字列表,但这不是一个完美的测试。

4

2 回答 2

4

一种方法是将其与普通索引进行比较:

pd.Index(np.arange(0, len(df))).equals(df.index)

例如:

In [11]: df = pd.DataFrame([['a', 'b'], ['c', 'd']], columns=['A', 'B'])

In [12]: df
Out[12]:
   A  B
0  a  b
1  c  d

In [13]: pd.Index(np.arange(0, len(df))).equals(df.index)
Out[13]: True

如果它不是普通索引,它将返回 False:

In [14]: df = df.set_index('A')

In [15]: pd.Index(np.arange(0, len(df))).equals(df.index)
Out[15]: False
于 2013-07-16T23:26:28.520 回答
0

我自己也遇到了这个。问题是在调用之前对数据框进行了索引,所以问题实际上索引是否被命名。在这种情况下,似乎不如.set_index()df.index.namedf.index.names

>>> import pandas as pd
>>> df = pd.DataFrame({"id1": [1, 2, 3], "id2": [4,5,6], "word": ["cat", "mouse", "game"]})
>>> df
   id1  id2   word
0    1    4    cat
1    2    5  mouse
2    3    6   game
>>> df.index
RangeIndex(start=0, stop=3, step=1)
>>> df.index.name, df.index.names[0]
(None, None)
>>> "indexed" if df.index.names[0] else "no index"
'no index'
>>> df1 = df.set_index("id1")
>>> df1
     id2   word
id1            
1      4    cat
2      5  mouse
3      6   game
>>> df1.index
>>> df1.index.name, df1.index.names[0]
('id1', 'id1')
Int64Index([1, 2, 3], dtype='int64', name='id1')
>>> "indexed" if df1.index.names[0] else "no index"
'indexed'
>>> df12 = df.set_index(["id1", "id2"])
>>> df12
          word
id1 id2       
1   4      cat
2   5    mouse
3   6     game
>>> df12.index
MultiIndex([(1, 4),
            (2, 5),
            (3, 6)],
           names=['id1', 'id2'])
>>> df12.index.name, df12.index.names[0]
(None, 'id1')
>>> "indexed" if df12.index.names[0] else "no index"
'indexed'

于 2021-10-08T16:20:24.190 回答