【问题标题】:Python - Pandas manipulating data frames in loopsPython - Pandas 在循环中操纵数据帧
【发布时间】:2018-11-23 05:43:14
【问题描述】:

我正在使用 pandas 处理数据,并且在使用 for 循环时遇到了一些问题。

基本上,我正在处理一些价格的时间序列,我必须计算每日价格的百分比变化;我只需要使用这些值,并且只需要最后 750 天。假设我有三个数据框,每个产品 A、B 和 C 一个,其中仅包含日期和每日价格。我写了这个:

import pandas as pd

products= [A, B, C]

for df in products:
    df["change"] = df["price"].pct_change()
    df.drop(index = [0], columns="price", inplace = True)
    df = df.iloc[-751:-1]

现在,除了 for 循环中的最后一行之外,它可以正常工作。它不会覆盖 A、B 和 C 的原始数据帧,而是仅修改当前在标签 df 下的数据帧;这显示在变量列表中,其中 df 是唯一具有 750 行的数据框,所有其他数据框都有它们最初的数据减去丢弃的数据框。关于如何解决这个问题的任何想法?

在类似的说明中,我有一个关于内存使用的问题。对于这样的事情,假设我想运行回归或对数据进行一些分析,这会更好,将每个产品保存在单独的数据框中,还是将它们合并到一个大数据框中? panda 有回归风格的功能,还是使用其他库更好,比如 numpy?

提前非常感谢!

【问题讨论】:

    标签: python pandas dataframe time-series


    【解决方案1】:

    您可以使用比任何循环都更有效的 apply 函数

    def youfunction(args):
        return something
    

    产品= [A, B, C]

    for df in products:
        df["change"] = df["price"].apply(yourfunction)
    

    注意 lambda 表达式在这里不起作用。

    【讨论】:

      【解决方案2】:

      您可以尝试将数据框放入字典中:

      import pandas as pd
      
      products= {'A':A, 'B':B, 'C':C}
      
      for k, v in products.items():
          products[k]["change"] = products[k]["price"].pct_change()
          products[k].drop(index = [0], columns="price", inplace = True)
          products[k] = products[k].iloc[-751:-1]
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2018-04-11
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 2017-09-28
        • 2018-10-01
        • 1970-01-01
        • 2019-09-21
        • 2021-04-22
        相关资源
        最近更新 更多