2016-05-24 7 views
3

DataFrameからlistsの列のセルを初期化する必要があります。pandasは空のリストとしてデータフレームの列セルを初期化します

df['some_col'] = [[] for _ in no_of_rows] 

私は時間効率の面でそれを行うより良い方法がありますか?

+0

あなたはあなたの出発点より遅い3倍のソリューションを提供しています答えを受け入れました。 – Stefan

+0

@Stefanあなたが正しいと思われるのは、 'apply(list)'が私の古いコードより少し遅いからです。 – daiyue

+0

下に示すように、 'itertools'を使って少し速くすることができますが、標準メソッドよりもカラムを追加する方が早いのではないので、実際にはかなり良いと思います。 – Stefan

答えて

2

あなたには、いくつかのベンチマークを下回る、時間効率を探していますので。私はlistの理解はすでにlistlistオブジェクトを作成するためにかなり速いと思うが、itertools.repeatを使用して限界改善を絞り出すことができる。それがループしているためinsert作品で、applyが遅く3倍されます。

import pandas as pd 
from itertools import repeat 
df = pd.DataFrame({"A":np.arange(100000)}) 

%timeit df['some_col'] = [[] for _ in range(len(df))] 
100 loops, best of 3: 8.75 ms per loop 

%timeit df['some_col'] = [[] for i in repeat(None, len(df))] 
100 loops, best of 3: 8.02 ms per loop 

%%timeit 
df['some_col'] = '' 
df['some_col'] = df['some_col'].apply(list) 
10 loops, best of 3: 25 ms per loop 
3

applyをお試しください:

df1['some_col'] = '' 
df1['some_col'] = df1['some_col'].apply(list) 

はサンプル:

df1 = pd.DataFrame({'a': pd.Series([1,2])}) 
print (df1) 
    a 
0 1 
1 2 

df1['some_col'] = '' 
df1['some_col'] = df1['some_col'].apply(list) 
print (df1) 
    a some_col 
0 1  [] 
1 2  [] 
+0

これは時間効率の面でどのように優れていますか? – Stefan

+0

ええと、時間効率の面では良いとは思えません。しかし、答える看板が受け入れられたのはOPまでです。たぶんあなたは私を好むかもしれません。しかし、おそらく数秒で彼の意見を変えます。知りません。 – jezrael

+0

また、 'lambda:[]'は 'list'より高速です。 –

関連する問題