predictor_purchases_p = predictor_purchases.groupby(["ag", "artikelnr"])["som"].max().unstack().fillna(0)
or
predictor_purchases_p = predictor_purchases.pivot(index="ag", columns="artikelnr", value="som")
Saya sedang mengerjakan data yang agak besar (memori> 100GB) di server yang gemuk (ram 3TB)
Saat memfaktorkan ulang kode saya dari pandas 0.21 ke versi terbaru, pivot/unstack sekarang mengembalikan pengecualian.
DataFrame yang tidak ditumpuk terlalu besar, menyebabkan int32 overflow
Saya dapat menghilangkan masalah dengan mengubah reshape.py:
ubah baris 121dari dtype np.int32 ke dtype np.int64:
num_cells = np.multiply(num_rows, num_columns, dtype=np.int64)
Tidak dibatasi oleh redup int32 saat membentuk kembali bingkai data.
Ini terasa seperti batasan yang seharusnya tidak ada.
pd.show_versions()
komit: Tidak ada
python: 3.7.3.final.0
python-bit: 64
OS: Linux
Rilis OS: 3.10.0-862.el7.x86_64
mesin: x86_64
prosesor: x86_64
urutan byte: sedikit
LC_ALL: Tidak ada
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
panda: 0.24.2
pytest: Tidak ada
pip: 19,1
setuptools: 41.0.1
Cython: 0.29.7
numpy: 1.16.3
sip: 1.2.1
pyarrow: Tidak ada
xarray: 0.12.1
IPython: 7.5.0
sphinx: Tidak ada
kue: 0.5.1
dateutil: 2.8.0
pytz: 2019.1
blok: Tidak ada
kemacetan: Tidak ada
tabel: Tidak ada
numexpr: Tidak ada
bulu: Tidak ada
matplotlib: 3.0.3
openpyxl: 2.6.2
xlrd: Tidak ada
xlwt: Tidak ada
xlsxpenulis: Tidak ada
lxml.etree: Tidak ada
bs4: Tidak ada
html5lib: Tidak ada
sqlalchemy: 1.3.3
pymysql: Tidak ada
psycopg2: Tidak ada
jinja2: 2.10.1
s3fs: Tidak ada
parket cepat: 0.3.0
pandas_gbq: Tidak ada
pandas_datareader: Tidak ada
gcsfs: Tidak ada
coba master ini baru-baru ini ditambal
Server perusahaan, singkat cerita, saya hanya bisa bekerja dengan rilis conda.
Saya tidak dapat melakukan apa pun dari github dan membuat build.
https://github.com/pandas-dev/pandas/pull/23512/files
jika Anda mencoba melakukan pendekatan ini pada masalah Anda secara berbeda
Poin yang ingin saya angkat adalah: mengapa jumlah sel dibatasi hingga nilai maksimal np.int32?
num_cells = np.multiply(num_rows, num_columns, dtype=np.int32)
Ini menciptakan kendala saat bekerja dengan bingkai data besar.
Pada dasarnya, saya mengusulkan untuk mengubah ini menjadi np.int64.
jadi Anda memiliki kolom 2B?
Dataset saya saat ini memiliki
RangeIndex: 2584251 entri
Kolom: 4539 entri
jumlah_sel = 2584251 * 4539 = 11.729.915.289 sel
Jadi, saya punya 11,7 sel B
Menempatkan batasan int32 pada jumlah sel terlalu kecil untuk kumpulan data saya.
Saya cukup yakin ini menyebabkan masalah bagi pengguna lain.
Btw, di pandas 0.21 saya bisa menjalankan unstacks ini tanpa masalah. Ukuran tidak menjadi masalah.
Memutakhirkan ke pandas 0.24.2 menghilangkan kemampuan ini.
Ya, aku menabrak ini juga. Saya mencoba membuat 2,87 miliar sel di unstack saya. Saya melihat masalah #20601 dan pada dasarnya melemparkan kesalahan yang lebih informatif lebih masuk akal daripada meningkatkan dari int32 ke int64. Saya agak setuju dengan penilaian itu. Akan lebih baik jika memiliki opsi dalam unstack yang memungkinkan Anda memberi tahu bahwa Anda berharap memiliki jumlah sel yang sangat besar dan beralih ke indeks int64.
Saya tidak yakin betapa sulitnya ini atau apakah layak untuk memuaskan orang-orang dengan daftar panjang pasangan pengguna produk seperti saya.
@Rblivingstone pasti akan mengambil PR untuk mengizinkan int64 di sini; itu tidak diuji dan itulah mengapa kami menaikkan
Saya mendapatkan kesalahan ini pada penggunaan memori 6 Gb dengan memutar rating besar movielens.csv. Jadi saya setuju di zaman sekarang ini kita membutuhkan int64.
Ternyata saya mendapatkan kesalahan yang sama bahkan setelah mengubah baris reshape.py menjadi num_cells = np.multiply(num_rows, num_columns, dtype=np.int64)
, meskipun kesalahan itu sepertinya terjadi di sana.
Saya mendapatkan "ValueError: dimensi negatif tidak diizinkan" setelah mengubah baris reshape.py menjadi num_cells = np.multiply(num_rows, num_columns, dtype=np.int64).
Adakah kemungkinan kita memiliki solusi yang berbeda? Saya hanya memiliki 6000 kolom ...
Saya memiliki masalah yang sama. Saya menggunakan data memori 9,9 BG.
df.pivot_table(index='uno', kolom=['programid'], nilai='avg_time')
ValueError: DataFrame yang tidak ditumpuk terlalu besar, menyebabkan int32 overflow
panda 0.25.0
@buddingPop @Code4SAFrankie @meganson apakah ada di antara kalian yang tertarik mengerjakan ini?
Kami juga membutuhkan contoh yang dapat direproduksi, jika ada yang bisa memberikannya.
Anda dapat mengunduh file rating.csv dari
https://www.kaggle.com/grouplens/movielens-20m-dataset
Kemudian buat pivottable seperti di bawah ini untuk mereproduksi masalah:
pivotTable = rating.pivot_table(index=['userId'],columns=['movieId'],values='rating')
Kami tidak akan dapat menyertakan pengunduhan kumpulan data itu dalam pengujian unit. Saya berasumsi ini dapat direproduksi dengan gaya data acak yang tepat? http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports
Masalah yang sama di sini.
df.set_index(['Elemen', 'usix']).unstack().reset_index(col_level=1)
ValueError: DataFrame yang tidak ditumpuk terlalu besar, menyebabkan int32 overflow
panda: 0.23.4
@TomAugspurger Biarkan saya mencoba menghasilkan data serupa dengan data acak.
@TomAugspurger
Ini adalah tes yang sangat naif, tetapi tampaknya menghasilkan kembali kesalahan untuk saya.
`impor acak
impor string
impor panda sebagai pd
baris_cnt = 4000000
c1_unique_val_cnt = 1500000
c2_unique_val_cnt = 1600
c1_set = [ i for i in range(c1_unique_val_cnt)]
c1 = [ random.choice(c1_set) untuk i dalam range(row_cnt)]
c2_set = [ i for i in range(c2_unique_val_cnt)]
c2 = [ random.choice(c2_set) untuk i dalam range(row_cnt)]
df_test = pd.DataFrame({'c1':c1, 'c2': c2 })
t = df_test.set_index(['c1', 'c2']).unstack()`
Menghasilkan kesalahan: "ValueError: Unstacked DataFrame terlalu besar, menyebabkan int32 overflow"
Terima kasih @vengertsev. Contoh serupa yang sedikit lebih cepat, karena membuat vektorisasi kolom
In [62]: df = pd.DataFrame(np.random.randint(low=0, high=1500000, size=(4000000, 2)), columns=['a', 'b'])
In [63]: df.set_index(['a', 'b']).unstack()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-63-2ee2ef4b1279> in <module>
----> 1 df.set_index(['a', 'b']).unstack()
~/sandbox/pandas/pandas/core/frame.py in unstack(self, level, fill_value)
6311 from pandas.core.reshape.reshape import unstack
6312
-> 6313 return unstack(self, level, fill_value)
6314
6315 _shared_docs[
~/sandbox/pandas/pandas/core/reshape/reshape.py in unstack(obj, level, fill_value)
408 if isinstance(obj, DataFrame):
409 if isinstance(obj.index, MultiIndex):
--> 410 return _unstack_frame(obj, level, fill_value=fill_value)
411 else:
412 return obj.T.stack(dropna=False)
~/sandbox/pandas/pandas/core/reshape/reshape.py in _unstack_frame(obj, level, fill_value)
438 value_columns=obj.columns,
439 fill_value=fill_value,
--> 440 constructor=obj._constructor,
441 )
442 return unstacker.get_result()
~/sandbox/pandas/pandas/core/reshape/reshape.py in __init__(self, values, index, level, value_columns, fill_value, constructor)
135
136 if num_rows > 0 and num_columns > 0 and num_cells <= 0:
--> 137 raise ValueError("Unstacked DataFrame is too big, causing int32 overflow")
138
139 self._make_sorted_values_labels()
ValueError: Unstacked DataFrame is too big, causing int32 overflow
@TomAugspurger , Bagus, terima kasih!
Adakah yang tertarik untuk mengerjakan ini sekarang karena kami memiliki contoh yang dapat direproduksi?
@TomAugspurger
ValueError Traceback (panggilan terakhir terakhir)
----> 1 peringkat = pd.read_csv('/home/ml/rating_stg.csv').groupby(['uno', 'program_title'])['view_percent'].mean().unstack()
2 peringkat.kepala()
~/anaconda3/lib/python3.7/site-packages/pandas/core/series.py di unstack(self, level, fill_value)
3299 """
3300 dari pandas.core.reshape.reshape impor unstack
-> 3301 mengembalikan unstack (self, level, fill_value)
3302
3303# -------------------------------------------------- -----------------------
~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/reshape.py di unstack(obj, level, fill_value)
394 unstacker = _Unstacker(obj.values, obj.index, level=level,
395 isi_nilai=isi_nilai,
--> 396 konstruktor=obj._constructor_expanddim)
397 mengembalikan unstacker.get_result()
398
~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/reshape.py di __init__(self, values, index, level, value_columns, fill_value, constructor)
122
123 jika num_rows > 0 dan num_columns > 0 dan num_cells <= 0:
--> 124 meningkatkan ValueError('DataFrame yang tidak ditumpuk terlalu besar,'
125 'menyebabkan int32 meluap')
126
ValueError: DataFrame yang tidak ditumpuk terlalu besar, menyebabkan int32 overflow
Halo,
saya menghadapi masalah yang sama mencoba membuat tabel pivot, jika seseorang dapat membantu!
Terima kasih
Kami membutuhkan PR untuk memperbaikinya di panda.
Pada Rabu, 18 Sep 2019 pukul 07:57 imanekho [email protected] menulis:
Halo,
saya menghadapi masalah yang sama mencoba membuat tabel pivot, jika seseorang bisa
Tolong !Terima kasih
—
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/pandas-dev/pandas/issues/26314?email_source=notifications&email_token=AAKAOIWZIGTP6E5QAUW6DOLQKIQR5A5CNFSM4HLQBXN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVX15Z
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAKAOIX6READO4P5TIOPTILQKIQR5ANCNFSM4HLQBXNQ
.
ini adalah satu-satunya solusi yang Anda pikirkan? solusi alternatif apa pun mungkin
saya sedang mengerjakan proyek akhir saya dan saya memiliki kumpulan data besar yang terlambat untuk mengubahnya
terima kasih
ini adalah satu-satunya solusi yang Anda pikirkan? solusi alternatif apa pun mungkin
saya sedang mengerjakan proyek akhir saya dan saya memiliki kumpulan data besar yang terlambat untuk mengubahnya
terima kasih
Anda dapat mencoba menurunkan versi panda Anda ke 0,21 (Lihat di sini https://github.com/pandas-dev/pandas/issues/26314#issuecomment-490502770). Saya mengalami masalah serupa baru-baru ini dan menurunkan versi dan berhasil di salah satu kumpulan data saya. Ini bukan solusi terbaik tetapi mungkin membuat Anda bergerak.
Terima kasih
Bisakah saya tahu bagaimana Anda menurunkan versi Anda? Saya mencoba menginstal 21.0 sehingga saya mendapatkan banyak kesalahan pada ketergantungan dengan perpustakaan lain
Terima kasih
Bisakah saya tahu bagaimana Anda menurunkan versi Anda? Saya mencoba menginstal 21.0 sehingga saya mendapatkan banyak kesalahan pada ketergantungan dengan perpustakaan lain
Terima kasih
pip install pandas==0.21
ini persis perintah yang saya gunakan
ini persis perintah yang saya gunakan
coba dengan Python 3.6
Setiap berita tentang ini, saya gagal untuk memutar kembali ke 0,21. Tindakan saya selanjutnya adalah menulis ulang fungsi yang di-vektorkan sebagai loop, tetapi saya lebih suka tidak.
Saya mendapatkan kesalahan ini di ver. 0.25.3
, ada kabar?
Masih buka, masih mencari relawan untuk memperbaikinya.
Ada pembaruan tentang ini?
Apakah menurunkan versi Panda membantu ??
pandas adalah proyek sukarelawan; PR akan diterima dari komunitas untuk masalah ini atau lainnya
Saya telah terjebak dengan ini beberapa hari dan akhirnya saya memperbaikinya dengan mengubah int32 menjadi int64. Apakah tidak apa-apa untuk mengirim permintaan tarik dengan itu?
@KaonToPion tolong lakukan.
@KaonToPion Harap beri tahu kami setelah Anda check-in... Saya ingin memperbaiki ini secepatnya... Terima kasih banyak!
Maaf, saya mengalami masalah dengan menginstal lingkungan pengembangan panda itu sebabnya butuh waktu lama
https://pandas.pydata.org/docs/development/contributing.html , jika itu membantu.
@KaonToPion juga menunggu perbaikan ini. Jika Anda bisa, silakan mencoba lagi, itu akan sangat bagus. Terima kasih!
Komentar yang paling membantu
Poin yang ingin saya angkat adalah: mengapa jumlah sel dibatasi hingga nilai maksimal np.int32?
num_cells = np.multiply(num_rows, num_columns, dtype=np.int32)
Ini menciptakan kendala saat bekerja dengan bingkai data besar.
Pada dasarnya, saya mengusulkan untuk mengubah ini menjadi np.int64.