为什么'reset_index(drop = True)'函数会不必要地删除列?

时间:2017-06-18 23:25:43

标签: 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(降= TRUE)

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

这是由于“ reset_index ”旁边的“(drop = True)”条款吗?但我不知道为什么它在我的电脑上有效,而不是在同事的电脑上。有人可以提供建议吗?

1 个答案:

答案 0 :(得分:3)

俗话说,"你的口译员会发生什么事情 解释器&#34 ;.没有看到这种差异就无法解释这种差异 输入两个Python交互式会话的完整命令历史记录。

然而,有可能猜测:

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

因此,在您的互动会话中,_worker_id是一个专栏。在你的同事中 交互式会话,_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名称foostr下方显示为一行 索引级别,当它是列时与repr在同一行。这是唯一的 在查看DataFrame的_worker_indexdf.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

但是当Navigator成为索引的一部分时会被删除:

Widget build() {
  return auth.currentUser == null ? new SignInPage() : new HomePage();
}