我有大约 300 个 .csv 文件,它们都具有相同数量的检测数据行和列。由于每个 .csv 文件代表一天并且结构相同,因此我认为最好将每个 .csv 文件放入 Pandas DataFrame 中,然后将它们放入 Panel 对象中以执行更快的计算。
我想为面板内的每个 DataFrame 添加额外的计算列,最好没有 for 循环。我正在尝试对面板使用 apply 函数,并根据附加了“p”的原始列名命名新列(以便以后进行索引)。下面是我目前正在使用的代码。
import pandas as pd
import numpy as np
import os.path
dir = "data/testsetup1/"
filelist = []
def initializeDataFrames():
for f in os.listdir(dir):
if ".csv" in f:
filelist.append(dir + f)
dd={}
for f in filelist:
dd[f[len(dir):(len(f)-4)]] = pd.read_csv(f)
return pd.Panel(dd)
def newCalculation(pointSeries):
#test function, more complex functions to follow
pointSeriesManiuplated = pointSeries.copy()
percentageMove = 1.0/float(len(pointSeriesManiuplated))
return pointSeriesManiuplated * percentageMove
myPanel = initializeDataFrames()
#calculatedPanel = myPanel.join(lambda x: myPanel[x,:,0:17].apply(lambda y:newCalculation(myPanel[x,:,0:17].ix[y])), rsuffix='p')
calculatedPanel = myPanel.ix[:,:,0:17].join(myPanel.ix[:,:,0:17].apply(lambda x: newCalculation(x), axis=2), rsuffix='p')
print calculatedPanel.values
上面的代码当前使用计算列复制每个 DataFrame,而不是将它们附加到每个 DataFrame。我正在使用的 apply 函数对 Series 对象进行操作,在这种情况下,它将是一个传递的列。 我的问题是如何在 Panel 上使用 apply 函数来计算新列并将它们附加到每个 DataFrame 中?
提前致谢。