gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:17:22 27 4
gpt4 key购买 nike

我有一个名为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com