我有一个Pandas数据框,其中我已将某些列指定为索引:
planets_dataframe.set_index(['host','name'], inplace=True)
我希望能够在各种情境下引用这些索引。在查询中使用索引的名称是可行的。
planets_dataframe.query('host == "PSR 1257 12"')
但是如果尝试使用它来获取索引值的列表,就会导致错误,而在它是列时我可以这样做。
planets_dataframe.name
#AttributeError: 'DataFrame' object has no attribute 'name'
或者当它是一个“常规”列时,将其用于列出结果
planets_dataframe.query('30 > mass > 20 and discoveryyear > 2009')['name']
#KeyError: u'no item named name'
我如何引用我正在使用作为索引的数据框架的“列”?
set_index
之前:
planets_dataframe.columns
# Index([u'name', u'lastupdate', u'temperature', u'semimajoraxis', u'discoveryyear', u'calculated', u'period', u'age', u'mass', u'host', u'verification', u'transittime', u'eccentricity', u'radius', u'discoverymethod', u'inclination'], dtype='object')
在set_index
之后:
planets_dataframe.columns
#Index([u'lastupdate', u'temperature', u'semimajoraxis', u'discoveryyear', u'calculated', u'period', u'age', u'mass', u'verification', u'transittime', u'eccentricity', u'radius', u'discoverymethod', u'inclination'], dtype='object')
drop=False
应该可以解决问题;但会失去索引提供的一些语义(特别是其分层性质)并导致一些冗余。 - oromedrop=False
不会改变索引的语义,它只是让您可以将列用作索引和常规列。至于冗余性,概念上可能有点烦人,但我在实践中并没有发现这是一个巨大的问题。 - BrenBarndrop=False
的作用吧。 - orome