Tantangan Salah satu aspek paling menantang dalam menjawab pertanyaan SO adalah waktu yang diperlukan untuk menciptakan kembali masalah (termasuk data). Pertanyaan yang tidak memiliki cara yang jelas untuk mereproduksi data cenderung tidak dijawab. Karena Anda meluangkan waktu untuk menulis pertanyaan dan Anda memiliki masalah yang ingin Anda bantu, Anda dapat dengan mudah membantu diri sendiri dengan memberikan data yang kemudian dapat digunakan orang lain untuk membantu menyelesaikan masalah Anda.
Instruksi yang diberikan oleh @Andy untuk menulis pertanyaan Pandas yang baik adalah tempat yang bagus untuk memulai. Untuk informasi lebih lanjut, lihat cara bertanya dan cara membuat contoh Minimal, Lengkap, dan dapat diverifikasi .
Harap jelaskan pertanyaan Anda di muka. Setelah meluangkan waktu untuk menulis pertanyaan Anda dan kode sampel apa pun, cobalah untuk membacanya dan memberikan 'Ringkasan Eksekutif' untuk pembaca Anda yang merangkum masalah dan dengan jelas menyatakan pertanyaan.
Pertanyaan asli :
Saya punya data ini ...
Aku ingin melakukan ini...
Saya ingin hasil saya terlihat seperti ini ...
Namun, ketika saya mencoba melakukan ini, saya mendapatkan masalah berikut ...
Saya sudah mencoba mencari solusi dengan melakukan [ini] dan [itu].
Bagaimana saya memperbaikinya?
Bergantung pada jumlah data, kode sampel, dan tumpukan kesalahan yang disediakan, pembaca harus melangkah jauh sebelum memahami apa masalahnya. Coba nyatakan kembali pertanyaan Anda sehingga pertanyaan itu sendiri ada di atas, dan kemudian berikan rincian yang diperlukan.
Pertanyaan yang Direvisi :
Qustion: Bagaimana saya bisa melakukan ini?
Saya sudah mencoba mencari solusi dengan melakukan [ini] dan [itu].
Ketika saya mencoba melakukan [ini], saya mendapatkan masalah berikut ...
Saya ingin hasil akhir saya terlihat seperti ini ...
Berikut adalah beberapa kode minimal yang dapat mereproduksi masalah saya ...
Dan berikut ini cara membuat ulang data sampel saya:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
MEMBERIKAN DATA SAMPEL JIKA DIPERLUKAN !!!
Terkadang hanya kepala atau ekor dari DataFrame yang dibutuhkan. Anda juga dapat menggunakan metode yang diusulkan oleh @JohnE untuk membuat kumpulan data yang lebih besar yang dapat direproduksi oleh orang lain. Menggunakan contohnya untuk menghasilkan DataFrame 100 baris harga saham:
stocks = pd.DataFrame({
'ticker':np.repeat( ['aapl','goog','yhoo','msft'], 25 ),
'date':np.tile( pd.date_range('1/1/2011', periods=25, freq='D'), 4 ),
'price':(np.random.randn(100).cumsum() + 10) })
Jika ini adalah data aktual Anda, Anda mungkin hanya ingin menyertakan kepala dan / atau ujung kerangka data sebagai berikut (pastikan untuk menganonimkan data sensitif apa pun):
>>> stocks.head(5).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319},
'ticker': {0: 'aapl', 1: 'aapl', 2: 'aapl', 3: 'aapl', 4: 'aapl'}}
>>> pd.concat([stocks.head(), stocks.tail()], ignore_index=True).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00'),
5: Timestamp('2011-01-24 00:00:00'),
6: Timestamp('2011-01-25 00:00:00'),
7: Timestamp('2011-01-25 00:00:00'),
8: Timestamp('2011-01-25 00:00:00'),
9: Timestamp('2011-01-25 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319,
5: 10.017209045035006,
6: 10.57090128181566,
7: 11.442792747870204,
8: 11.592953372130493,
9: 12.864146419530938},
'ticker': {0: 'aapl',
1: 'aapl',
2: 'aapl',
3: 'aapl',
4: 'aapl',
5: 'msft',
6: 'msft',
7: 'msft',
8: 'msft',
9: 'msft'}}
Anda mungkin juga ingin memberikan deskripsi tentang DataFrame (hanya menggunakan kolom yang relevan). Ini memudahkan orang lain untuk memeriksa tipe data setiap kolom dan mengidentifikasi kesalahan umum lainnya (misalnya tanggal sebagai string vs datetime64 vs objek):
stocks.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
date 100 non-null datetime64[ns]
price 100 non-null float64
ticker 100 non-null object
dtypes: datetime64[ns](1), float64(1), object(1)
CATATAN: Jika DataFrame Anda memiliki MultiIndex:
Jika DataFrame Anda memiliki multiindex, Anda harus mengatur ulang terlebih dahulu sebelum menelepon to_dict
. Anda kemudian perlu membuat ulang indeks menggunakan set_index
:
# MultiIndex example. First create a MultiIndex DataFrame.
df = stocks.set_index(['date', 'ticker'])
>>> df
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059
...
# After resetting the index and passing the DataFrame to `to_dict`, make sure to use
# `set_index` to restore the original MultiIndex. This DataFrame can then be restored.
d = df.reset_index().to_dict()
df_new = pd.DataFrame(d).set_index(['date', 'ticker'])
>>> df_new.head()
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059