我有一个名为 data_match 的 Pandas 数据框。它包含“_worker_id”、“_unit_id”和“caption”列。 (有关此数据框中的某些行,请参阅随附的屏幕截图)
假设索引列未按升序排列(我希望索引为 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 的 str
或 repr
时获得的视觉线索。
所以重复一下:当_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/