快速存储循环结果Python

时间:2016-10-20 12:04:16

标签: python python-3.x loops pandas

我有一个函数,我调用pandas DataFrame的每一行,我想存储每个函数调用的结果(每次迭代)。以下是我想要做的一个例子。

data =[{'a':1,'b':2,'c':3},{'a':1,'b':2,'c':3}, {'a':1,'b':2,'c':3}]
InputData = pd.DataFrame(data)

ResultData = pd.DataFrame(columns = ['a', 'b', 'c'])

def SomeFunction(row):
    #Function code goes here (not important to this question)#
    ##########################################################
    ##########################################################
    return Temp 


for index, row in InputData.iterrows():
    # Temp will equal the result of the function (a DataFrame with 3 columns and 1 Row)
    Temp = Somefunction(row)

    # If ResultData is not empty append Temp to ResultData
    if len(ResultData) != 0:
        ResultData = ResultData.append(Temp, ignore_index = True)
    # If ResultData is empty Result data = Temp
    else:
        ResultData = Temp

我希望我的例子很容易理解。

在我的实例中,我在输入数据中有大约一百万行,这个过程非常慢,我认为这是DataFrame的附加,这使得它变得如此之慢。是否有可能使用的不同数据结构可以存储“Temp”DataFrame的三个值,这三个值可以在末尾附加以形成“ResultData”DataFrame?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

最好避免pandas中的任何显式循环。使用apply仍然有点慢,但可能比循环更快。

df["newcol"] = df.apply(function, axis=1)

答案 1 :(得分:0)

列表列表可能会解决您的问题:

Result_list = []

for ... :
  ...
  Result_list.append([data1, data2, data3]);

要查看数据:

for Current_data in Result_list:
   data1 = Current_data[0]
   data2 = Current_data[1]
   data3 = Current_data[2]

希望它有所帮助!