DataFrame
からlists
の列のセルを初期化する必要があります。pandasは空のリストとしてデータフレームの列セルを初期化します
df['some_col'] = [[] for _ in no_of_rows]
私は時間効率の面でそれを行うより良い方法がありますか?
DataFrame
からlists
の列のセルを初期化する必要があります。pandasは空のリストとしてデータフレームの列セルを初期化します
df['some_col'] = [[] for _ in no_of_rows]
私は時間効率の面でそれを行うより良い方法がありますか?
あなたには、いくつかのベンチマークを下回る、時間効率を探していますので。私はlist
の理解はすでにlist
のlist
オブジェクトを作成するためにかなり速いと思うが、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
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 []
あなたはあなたの出発点より遅い3倍のソリューションを提供しています答えを受け入れました。 – Stefan
@Stefanあなたが正しいと思われるのは、 'apply(list)'が私の古いコードより少し遅いからです。 – daiyue
下に示すように、 'itertools'を使って少し速くすることができますが、標準メソッドよりもカラムを追加する方が早いのではないので、実際にはかなり良いと思います。 – Stefan