当前位置: 首页 > 知识库问答 >
问题:

何时重置索引?loc与iloc在索引中的差距?最佳实践?

邵研
2023-03-14

我在代码中发现了一个非常微妙的错误。在分析中,我经常从数据帧中删除行。因为这将在索引中留下间隙,所以我尝试通过在末尾用

df0 = df0.reset_index (drop = True)

然后在下一个函数中继续使用

for row in xrange (df0.shape [0]):
    print df0.loc [row]
    print df0.iloc [row]

但是,如果我没有正确重置索引,第一行的索引可能是192。192的索引与0的行号不同。这导致了这样一个问题:df0.loc[row]访问索引为0的行,而df0.iloc[row]正在访问索引为192的行。这导致了一个非常奇怪的错误,我试图更新第0行,但索引192却被更新了。反之亦然。

但实际上,我不使用任何df0.loc()或df0.iloc()函数,因为它们太慢了。我的代码中充满了df0.get_value(…)和df0.set_value(…)函数,因为它们是访问值时最快的函数。

看起来有些函数是通过索引访问的,而有些函数是通过行号访问的?我很困惑。有人能给我解释一下吗?最佳实践是什么?有些函数使用索引访问值,有些函数使用行号?我误解了什么吗?我应该经常重置_index()吗?或者永远不要这样做?

编辑:总结一下:我手动合并函数中的一些行,所以在指示中会有空白。在其他函数中,我遍历每一行并进行计算。但是,如果我重置了索引,我会得到其他计算结果,而不是不重置索引。为什么啊?那是我的问题。

共有1个答案

孟绪
2023-03-14

.loc[]查看索引标签,这些标签可能是整数值,也可能不是整数值。

  • 如果您的索引是[0,1,3](非顺序整数索引),.loc[2]将找不到任何内容,因为没有索引标签2

.iloc[]查看索引位置,索引位置始终为整数值。

  • 如果您的索引是[0,1,3]. loc[2]将返回对应于3的行。
  • 如果你的索引是['a','b','c']. loc[2]将返回对应于'c'的行。

也就是说,听起来你的代码确实有点棘手。必须在一堆不同的地方执行reset_index(),并不断跟踪您试图更新的行,这表明您可能没有利用熊猫一次在许多行和列上执行基于向量的计算的能力。也许你想要完成的任务让这不可避免。但是值得花些时间考虑一下,您是否不能将您正在做的一些事情矢量化,以便您可以将其应用于整个数据帧或数据帧的子集,而不是一次对单个单元格进行操作。

 类似资料:
  • 本文向大家介绍反向索引与正向索引之间的差异,包括了反向索引与正向索引之间的差异的使用技巧和注意事项,需要的朋友参考一下 反向索引和正向索引是用于在一个文档或一组文档中搜索文本的数据结构。 倒排索引 倒排索引将单词存储为索引,将文档名称存储为映射参考。 远期指数 转发索引将文档名称存储为索引,将单词存储为映射参考。 以下是倒排索引和正向索引之间的一些重要区别。 序号 键 倒排索引 远期指数 1 映射

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 如果我定义一个像这样的分层索引数据框: 内容如下所示: 我知道如何提取与给定列对应的数据。例如。对于列: 如何提取符合以下标准集的数据: , , , column , , 列 和 、、列、以及从开始的所有列 是偶数 (顺便说一句,我做了不止一次rtfm,但我真的觉得难以理解。)

  • 问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答

  • 问题内容: 我的表(a,b,c,d)中有四列,它们全都依赖于列(日期),所以在查询中我有: 我需要知道为所有索引创建索引的最佳方法是什么,我有两个建议: 第一个建议: 第二个建议: 请使用哪个更好。 问题答案: 这可能对您有帮助: 要索引的列应该是用于过滤的列(子句)。您可以添加以避免查询。

  • 主要内容:重置行列标签,填充元素值,限制填充行数,重命名标签重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。 重置行列标签 看一组简单示例: 输出结果: 现有 a、b 两个 DataFrame 对象,如果想让 a  的行