Python - Pandas在循环中操纵数据帧

时间:2018-06-13 15:12:04

标签: python pandas dataframe time-series

我使用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行的数据帧,其他所有数据帧都具有它们最初具有的减去丢弃的数据帧。有关如何解决此问题的任何想法?

在类似的说明中,我对内存使用情况有疑问。对于这样的事情,比方说我想运行回归或对数据进行一些分析,这会更好,将每个产品保存在一个单独的数据框中,或者将它们合并为一个大数据框架?熊猫是否具有回归式功能,或者使用其他库如numpy会更好吗?

提前多多感谢!

2 个答案:

答案 0 :(得分:0)

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

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]
希望它会有所帮助

答案 1 :(得分:0)

您可以使用比任何循环更好的apply函数

def youfunction(args):
    return something

产品= [A,B,C]

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

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