【问题标题】:storing the results of a loop quickly Python快速存储循环的结果 Python
【发布时间】:2016-10-20 12:04:15
【问题描述】:

我有一个函数,我在 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?

任何帮助将不胜感激

【问题讨论】:

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

标签: python python-3.x loops pandas


【解决方案1】:

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

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

【讨论】:

    【解决方案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]
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多