相当于 pandas .append() 方法,允许方法链接

Equivalent of pandas .append() method, which allows method chaining

提问人:mouwsy 提问时间:9/8/2023 最后编辑:mouwsy 更新时间:9/8/2023 访问量:89

问:

现在它在 pandas 2.0 中已经弃用了,那么除了允许方法链接之外,还有什么简短的替代方案呢? pandas 的“2.0.0 中的新功能”部分说:append()append()

删除了已弃用的 、 、 改用 (GH 35407)Series.append()DataFrame.append()concat()

我正在寻找一些简单的东西,就像下面的例子一样,只添加一行,但它需要是可以包含在方法链中的东西。

import pandas as pd

df = pd.DataFrame([
    [4, 5, 6],
    [7, 8, 9],
    [1, 6, 4]])

df.loc[len(df)] = [10, 20, 30]
Python pandas 方法链接

评论

6赞 wjandrea 9/8/2023
concat可以位于链的顶端;你试过了吗?如果它需要在中间,你知道吗?df.pipe
1赞 Karl Knechtel 9/8/2023
您是否检查了弃用的原因?如果这种“流畅”的接口应该就地工作,通常不被认为是 Pythonic,因为我们更愿意尊重命令查询分离

答:

1赞 mozway 9/8/2023 #1

由于要使用方法链接,请使用 pipeconcat

out = (df
      #.some_method()
       .pipe(lambda d: pd.concat(
             [d, pd.DataFrame([[10, 20, 30]],
                              columns=df.columns)],
             ignore_index=True)
             )
      #.some_other_method()
      )

或者,如果添加行是第一步:

out = (pd.concat([d, pd.DataFrame([[10, 20, 30]],
                                   columns=df.columns)],
                 ignore_index=True)
        #.other_methods()
      )

输出:

    0   1   2
0   4   5   6
1   7   8   9
2   1   6   4
3  10  20  30

请注意,添加新行的成本很高,因为这会创建一个全新的 DataFrame。如果你做一两次,但不要在一个循环中做,这很好,否则对于大型数据集来说,这会非常慢。