python-3.x - 为什么 'reset_index(drop=True)' 函数会意外删除列?

标签 python-3.x pandas indexing

我有一个名为 data_match 的 Pandas 数据框。它包含“_worker_id”、“_unit_id”和“caption”列。 (有关此数据框中的某些行,请参阅随附的屏幕截图)

enter image description here

假设索引列未按升序排列(我希望索引为 0、1、2、3、4...n),但我希望它按升序排列。所以我运行了以下函数试图重置索引列:

data_match=data_match.reset_index(drop=True)

我能够使用 Python 3.6 在我的计算机中获得返回正确输出的函数。但是,当我的同事使用 Python 3.6 在他的计算机上运行该函数时,“_worker_id”列被删除了。

这是由于 reset_index 旁边的 (drop=True) 子句造成的吗?但我不知道为什么它在我的电脑上运行,而不是在我同事的电脑上运行。有人可以建议吗?

最佳答案

俗话说,“在你的解释器中发生的事情留在你的 口译员”。如果不看到 输入到两个 Python 交互式 session 中的命令的完整历史记录。

但是,可以大胆猜测:

df.reset_index(drop=True) 删除 DataFrame 的当前索引并将其替换为索引 增加整数。它从不丢弃列。

因此,在您的交互式 session 中,_worker_id 是一列。在你同事的 交互式 session ,_worker_id 必须是索引级别。

视觉差异可能有些细微。例如,在下面,df 有一个 _worker_id 列,而 df2 有一个 _worker_id 索引级别:

In [190]: df = pd.DataFrame({'foo':[1,2,3], '_worker_id':list('ABC')}); df
Out[190]: 
  _worker_id  foo
0          A    1
1          B    2
2          C    3

In [191]: df2 = df.set_index('_worker_id', append=True); df2
Out[191]: 
              foo
  _worker_id     
0 A             1
1 B             2
2 C             3

注意名称 _worker_id 出现在 foo 下面的一行,当它是一个 索引级别,当它是列时与 foo 在同一行。那是唯一的 查看 DataFrame 的 strrepr 时获得的视觉线索。

所以重复一下:当_worker_index 是一个列时,该列不受 df.reset_index(drop=True):

In [194]: df.reset_index(drop=True)
Out[194]: 
  _worker_id  foo
0          A    1
1          B    2
2          C    3

但是 _worker_index 当它是索引的一部分时会被丢弃:

In [195]: df2.reset_index(drop=True)
Out[195]: 
   foo
0    1
1    2
2    3

关于python-3.x - 为什么 'reset_index(drop=True)' 函数会意外删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620465/

相关文章:

python - 如何基于 Pandas 数据框中的单列(内爆或嵌套)合并多行?

python - Python 中仅当所有 try 语句都成功时才运行语句

matlab - 将向量中的唯一值分组并将它们放入矩阵中

mysql - 为什么这个查询不使用 ORDER BY 索引?

python - 设置属性 python

python-3.x - Itertool的Python内存错误

python - 在 Python 中矢量化 Haversine 距离计算

python - Pandas 分组 - 值占分组总数的百分比不起作用

python - Pandas 一次迭代多行重叠

regex - MongoDB:哪个更快?正则表达式搜索字符串还是直接搜索数组?