据我了解,对特定的列使用set_index
函数的优点是允许基于值直接访问行。只要您知道该值,就无需使用loc
之类的东西进行搜索,从而减少了操作的运行时间。熊猫还允许您使用此功能将多个列设置为索引。我的问题是,这些索引在几列之后不再有价值?如果我将数据帧中的每一列都指定为索引,那么在使用loc
进行搜索时,仍然可以看到索引行的速度提高了吗?
答案 0 :(得分:2)
将所有内容都设置为索引的真正弊端深藏在Pandas的高级索引文档中:indexing can change the dtype of the column being set to index。我希望您在实现预期的性能收益之前遇到此问题。
关于性能上的好处,无论您是否显式设置它们,都需要在构造Series
对象时预先进行索引。 AFAIK Pandas默认为所有索引。就像杰克·范德普拉斯(Jake VanderPlas)所说的那样:
如果Series是具有灵活索引的一维数组的类似物,则DataFrame是具有灵活行索引和灵活列名的二维数组的类似物。就像您将二维数组视为对齐的一维列的有序序列一样,您也可以将DataFrame视为对齐的Series对象的序列。在这里,“对齐”是指它们共享相同的索引。 -Jake VanderPlas,The Python Data Science Handbook
因此,将某些内容设置为索引的原因是使您更轻松地使用数据或支持数据访问模式,而不必像数据库索引那样进行性能优化。