Zorluk SO sorularına cevap vermenin en zor yanlarından biri, problemi yeniden oluşturmak için gereken süredir (veriler dahil). Verileri yeniden üretmek için net bir yolu olmayan soruların cevaplanması daha az olasıdır. Bir soru yazmak için zaman ayırdığınızdan ve yardım etmek istediğiniz bir sorununuz olduğunda, başkalarının sorununuzu çözmek için kullanabileceği verileri sağlayarak kendinize kolayca yardımcı olabilirsiniz.
@Andy tarafından iyi Pandalar soruları yazmak için verilen talimatlar başlamak için mükemmel bir yerdir. Daha fazla bilgi için, En az, Tam ve Doğrulanabilir örneklerin nasıl sorulacağına ve nasıl oluşturulacağına bakın .
Lütfen sorunuzu açıkça belirtin. Sorunuzu ve herhangi bir örnek kodu yazmaya zaman ayırdıktan sonra, okumaya çalışın ve okuyucunuz için sorunu özetleyen ve soruyu açıkça ifade eden bir 'Yönetici Özeti' sağlayın.
Orijinal soru :
Bu verilerim var ...
Bunu yapmak istiyorum...
Sonucumun böyle görünmesini istiyorum ...
Ancak, [bunu] yapmaya çalıştığımda, aşağıdaki sorunu alıyorum ...
[This] ve [that] yaparak çözüm bulmaya çalıştım.
Nasıl düzeltebilirim?
Verilerin miktarına, örnek koduna ve hata yığınlarına bağlı olarak, okuyucunun sorunun ne olduğunu anlamadan önce uzun bir yol kat etmesi gerekir. Sorunun üst kısmında yer alması için sorunuzu yeniden düzenlemeyi deneyin ve ardından gerekli ayrıntıları sağlayın.
Gözden Geçirilmiş Soru :
Soru: [Bunu] nasıl yapabilirim?
[This] ve [that] yaparak çözüm bulmaya çalıştım.
[Bunu] yapmaya çalıştığımda, aşağıdaki sorunu alıyorum ...
Nihai sonuçların böyle görünmesini istiyorum ...
İşte benim sorunum yeniden üretebilir bazı minimal kod ...
İşte örnek verilerimi nasıl yeniden oluşturacağım:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
GEREKİRSE ÖRNEK VERİ SAĞLAYIN !!!
Bazen sadece DataFrame'in başı veya kuyruğu yeterlidir. Başkaları tarafından çoğaltılabilecek daha büyük veri kümeleri oluşturmak için @JohnE tarafından önerilen yöntemleri de kullanabilirsiniz. 100 satırlık bir DataFrame hisse senedi fiyatı oluşturmak için örneğini kullanma:
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) })
Gerçek verileriniz buysa, veri çerçevesinin başını ve / veya kuyruğunu aşağıdaki gibi dahil etmek isteyebilirsiniz (hassas verileri anonimleştirdiğinizden emin olun):
>>> 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'}}
Ayrıca DataFrame'in bir açıklamasını da vermek isteyebilirsiniz (yalnızca ilgili sütunları kullanarak). Bu, başkalarının her bir sütunun veri türlerini kontrol etmesini ve diğer yaygın hataları tanımlamasını kolaylaştırır (ör. Tarihler dize ile datetime64'e karşı nesne):
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)
NOT: DataFrame'inizde bir MultiIndex varsa:
DataFrame'inizde çoklu dizin varsa, aramadan önce sıfırlamanız gerekir to_dict
. Daha sonra dizini aşağıdakileri kullanarak yeniden oluşturmanız gerekir 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