2016-10-20 13 views
0

私はpandas DataFrameの各行で呼び出す関数を持っており、各関数呼び出し(各繰り返し)の結果を保存したいと思います。以下は、私がやろうとしていることの例です。ループの結果を素早く保存するPython

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 

私の例は、以下のとおりです。

私の実際の例では、入力データには約100万行があり、このプロセスは非常に遅く、それは遅くなっているDataFrameを追加していると思います。おそらく、 "Temp" DataFrameの3つの値を格納できる別のデータ構造がありますが、最後に "ResultData" DataFrameを追加することができますか?

すべてのヘルプははるかに

+2

あなたの機能は、この質問にとって非常に重要です。それは事実上重要な唯一のものです。 –

+0

'df.iterrows()'はある種の遅い系列を返します。本当に 'SomeFunction'には系列が必要ですか? –

+0

@StevenG - 必要なのは、各行のすべての値です。すなわち、この例では1,2,3が必要です。私はそれがシリーズである必要はないと思う、それはリストまたはその他のデータ構造である可能性があります。 – Ayelavan

答えて

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] 

はそれが役に立てば幸い!

2

パンダの明示的なループを避けることをおすすめします。 applyの使用はまだ少し遅いですが、おそらくループより速いです。

df["newcol"] = df.apply(function, axis=1) 
関連する問題