【问题标题】:Why do we need to redefine pandas DataFrame after changing columns?为什么我们需要在更改列后重新定义 pandas DataFrame?
【发布时间】:2021-12-16 04:44:33
【问题描述】:

我只是想知道为什么 Pandas DataFrame 类函数不改变它们的实例。 例如,如果我使用 pd.DataFrame.rename()、dropn(),我需要通过重新定义来更新实例。但是,如果它的类是列表,您可以通过 pop() 方法删除一个元素,而无需重新定义它。该函数更改其内在实例。

pandas 或 numpy 使用这种风格有什么原因吗? 你能解释一下为什么这种样式更好或者它的优点吗?

【问题讨论】:

    标签: python pandas numpy styles


    【解决方案1】:

    Pandas 已向用户提供此选项。您提到的函数中的“就地”参数适用于此。如果将 inplace 参数设置为 True,它将对原始 DataFrame 执行操作。我留下了一些有用的链接。

    https://towardsdatascience.com/learn-how-to-use-pandas-inplace-parameter-once-and-for-all-5a29bb8bf338

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

    最好的问候

    【讨论】:

      【解决方案2】:

      原因是允许选项覆盖您正在处理的数据框对象,或者通过创建副本并将其分配给不同的变量来使其保持不变。该选项很有价值,具体取决于您可能希望直接修改原始数据或不直接修改原始数据的情况。

      inplace 参数是您有权在两个选项之间进行选择的一种方式。

      【讨论】:

        【解决方案3】:

        每个类都定义了哪些更改可以进行in-place,哪些不能进行,而是创建一个新对象。原因五花八门,不能归结为几条简单的规则。

        list 的底层数据结构专为增长和收缩而设计。即便如此,有些变化还是cheaper。最后的appendpop 比在开头或中间添加或删除项目需要更少的数据更改。即便如此,blist = alist[1:] 之类的操作也会生成一个新列表。

        tuplelist 的变体,它是不可变的,并广泛用于基础 Python 中用于函数参数和打包/解包结果。

        numpy 数组具有固定大小。像列表一样,单个值可以就地更改,但增长需要创建一个新数组(resize 的有限使用除外)。 numpy 也有一个 view 机制,可以创建一个新数组,但共享基础数据。这可能是有效的,但对于粗心的人来说会有陷阱。

        pandas 建立在numpy 之上,索引和值存储在数组中。正如其他答案所示,它通常有一个 in-place 选项,但我怀疑这实际上并没有减少工作或运行时间。我们必须更多地了解变更和数据框结构。

        最终,我们,SO 发帖人,无法权威地回答“为什么”的问题。我们只能根据知识和经验给出意见。我们大多数人都不是开发人员,当然也不是原始开发人员。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-09
          • 2013-12-17
          • 2011-12-12
          • 1970-01-01
          相关资源
          最近更新 更多