Geniş bir veri çerçevem var (birkaç milyon satır).Pandaların ardışık parçalarının verimli bir şekilde nasıl kopyalanacağı
Üzerinde bir grup çalışması yapmak istiyorum, ancak hangi gruba gittiğine karar vermek için tek tek satırların belirli bir özelliğini kullanmak yerine, yalnızca ardışık ardışık (tercihen eşit büyüklükte) satır alt kümeleriyle gruplamak istiyorum .
Kullanım durumu: IPython'daki bir paralel harita üzerinden her satıra bir işlev uygulamak istiyorum. Hangi satırların hangi arka uç motora gittiği önemli değil, çünkü işlev bir seferde bir sıraya dayalı bir sonuç hesaplar.
# Generate a number from 0-9 for each row, indicating which tenth of the DF it belongs to
max_idx = dataframe.index.max()
tenths = ((10 * dataframe.index)/(1 + max_idx)).astype(np.uint32)
# Use this value to perform a groupby, yielding 10 consecutive chunks
groups = [g[1] for g in dataframe.groupby(tenths)]
# Process chunks in parallel
results = dview.map_sync(my_function, groups)
Ama bu çok uzun soluklu görünüyor ve eşit büyüklükte parçalar garanti etmez:
böyle bir şey ile geldim; (. Kavramsal olarak en az gerçekte vectorized oluyor). Özellikle endeks seyrek veya tam sayı değilse veya her neyse.
Daha iyi bir yol için önerileriniz var mı?
Teşekkürler!
Bu aklımda olan şeydi! Teknik olarak "df.groupby (np.arange (len (df)) // (len (df)/10))" sabit boyut yerine sabit sayıda grup (çekirdek başına 1) elde etmek için. Bazı sebeplerden dolayı, gruplama anahtarının aslında endeksle ilgili olması gerekmediği ortaya çıkmıştı ... –
Verimlilik için orijinal dosyayı bir "yineleyici" kullanarak okumak muhtemelen daha iyi olacaktır. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) ve bir "chunksize", böylece read_csv işlevi okumayı yapar ve her bir parça, tarafından açıklandığı gibi ayrı bir işleme geçirilebilir. @Ryan –