Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python快速存储循环结果_Python_Python 3.x_Loops_Pandas - Fatal编程技术网

用Python快速存储循环结果

用Python快速存储循环结果,python,python-3.x,loops,pandas,Python,Python 3.x,Loops,Pandas,我有一个在数据帧的每一行上调用的函数,我想存储每个函数调用(每次迭代)的结果。下面是我试图做的一个例子 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 g

我有一个在数据帧的每一行上调用的函数,我想存储每个函数调用(每次迭代)的结果。下面是我试图做的一个例子

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
我希望我的例子很容易理解

在我的真实示例中,输入数据中有大约一百万行,这个过程非常慢,我认为是数据帧的附加使得它非常慢。我是否可以使用一种不同的数据结构来存储“Temp”数据框的三个值,这些值可以附加在末尾以形成“ResultData”数据框


任何帮助都将不胜感激

也许列表可以解决您的问题:

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]

希望有帮助

也许列表可以解决您的问题:

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]

希望有帮助

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

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

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

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

你的功能对这个问题非常重要。这实际上是唯一重要的事情。
df.iterrows()
返回一个有点慢的序列,你真的需要
SomeFunction
中的序列吗?@steven-我需要的是每行的每一个值。i、 在这个例子中,我需要1,2,3。我想它不需要是一个系列,它可以是一个列表或其他一些数据结构。然后使用
df.itertuples()
并更改
SomeFunction
。使用一个列表来存储你的结果,正如下面匿名者所说,你可以有效地将一个函数应用于数据帧或数据帧片段,并得到一个新的数据帧作为结果,不幸的是,我没有时间发布一个正确的答案。你的函数所做的对这个问题非常重要。这实际上是唯一重要的事情。
df.iterrows()
返回一个有点慢的序列,你真的需要
SomeFunction
中的序列吗?@steven-我需要的是每行的每一个值。i、 在这个例子中,我需要1,2,3。我想它不需要是一个系列,它可以是一个列表或其他一些数据结构。然后使用
df.itertuples()
并更改
SomeFunction
。使用一个列表来存储你的结果,正如下面匿名者所说,你可以有效地将一个函数应用到数据帧或数据帧片段,并得到一个新的数据帧作为结果,不幸的是,我没有时间发布正确的答案。