是否可以检查熊猫数据框是否已编入索引?检查是否DataFrame.set_index(...)
曾经在数据帧上调用过?我可以检查是否df.index
是一个数字列表,但这不是一个完美的测试。
user248237
问问题
1496 次
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.name
df.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 回答