İyi çoğaltılabilir panda örnekleri nasıl yapılır
Her iki izlerken zaman insana yakışır bir miktar geçirmiş olması r ve pandalar SO etiketleri, ben almak izlenim olduğunu pandas
soruların daha az olasılıkla tekrarlanabilir veriler içermesi vardır. Bu R topluluğu teşvik konusunda oldukça iyi olmuştur şeydir ve benzeri kılavuzları sayesinde bu yeni gelenler birlikte bu örnekleri koyarak biraz yardım almak edebiliyoruz. Bu kılavuzları okuyabilen ve yeniden üretilebilir verilerle geri gelen kişiler, sorularına yanıtlar almak için genellikle çok daha fazla şansa sahip olacaklardır.
pandas
Sorular için tekrarlanabilir iyi örnekleri nasıl oluşturabiliriz ? Basit veri çerçeveleri bir araya getirilebilir, örneğin:
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
Ancak birçok örnek veri kümesinin daha karmaşık bir yapıya ihtiyacı vardır, örneğin:
datetime
endeksler veya veriler- Çoklu kategorik değişkenler (
expand.grid()
verilen bazı değişkenlerin tüm olası kombinasyonlarını üreten R'nin fonksiyonuna bir eşdeğer var mı?) - MultiIndex veya Panel verileri
Birkaç satır kod kullanarak dput()
modellemesi zor olan veri kümeleri için, veri yapınızı yeniden oluşturmak için kopyalanabilir kod oluşturmanıza olanak tanıyan R'lere bir eşdeğeri var mı?
Yanıtlar
Not: Buradaki fikirler Stack Overflow için oldukça geneldir, gerçekten de sorular .
Sorumluluk Reddi: İyi bir soru yazmak ZORdur.
İyi:
küçük * örnek DataFrame'i çalıştırılabilir kod olarak dahil edin:
In [1]: df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B'])
veya kullanarak "kopyalayıp yapıştırılabilir" yapın
pd.read_clipboard(sep='\s\s+')
, Yığın Taşması vurgulama için metni biçimlendirebilir ve Ctrl+ kullanabilir K(veya her satırın başına dört boşluk ekleyebilir) veya kodunuz girintisiz olarak kodunuzun üstüne ve altına üç tild yerleştirebilirsiniz:In [2]: df Out[2]: A B 0 1 2 1 1 3 2 4 6
pd.read_clipboard(sep='\s\s+')
kendinizi test edin .* Gerçekten küçük demek istiyorum , DataFrames örneğinin büyük çoğunluğu 6 satırdan daha az alıntı gerektirebilir ve bahse girerim bunu 5 satırda yapabilirim. Birlikte hatayı yeniden Can
df = df.head()
görmemek keman etrafında eğer karşılaştığınız sorunu sergileyen küçük DataFrame makyaj eğer.* Her kuralın bir istisnası vardır, bariz bir (performans sorunları için bu durumda kesinlikle% sürümüyle gelen timeit ve muhtemelen% prun kullanmak (biz tam aynı çerçeveniz olması açısından np.random.seed kullanarak düşünün), elde etmelidir):
df = pd.DataFrame(np.random.randn(100000000, 10))
. "Bu kodu benim için hızlı yap" demek sitenin konusu değil ...istediğiniz sonucu yazın (yukarıdakine benzer şekilde)
In [3]: iwantthis Out[3]: A B 0 1 5 1 4 6
Sayıların nereden geldiğini açıklayın: 5, A'nın 1 olduğu satırlar için B sütununun toplamıdır.
denediğiniz kodu gösterin :
In [4]: df.groupby('A').sum() Out[4]: B A 1 5 4 6
Ancak neyin yanlış olduğunu söyleyin: A sütunu bir sütun yerine dizindedir.
Yaptığın biraz araştırma (gösterirler dokümanları aramak , StackOverflow arama ), bir özet vermek:
Toplam için docstring basitçe "Grup değerlerinin toplamını hesapla" ifadesini belirtir
GroupBy dokümanlar Bunun için herhangi bir örnek vermeyin.
Kenara: buradaki cevap kullanmaktır
df.groupby('A', as_index=False).sum()
.Zaman Damgası sütunlarınızın olması alakalıysa, örneğin yeniden örnekleme yapıyorsanız veya başka bir şey varsa, o zaman açık olun ve
pd.to_datetime
iyi bir ölçüm için bunlara başvurun **.df['date'] = pd.to_datetime(df['date']) # this column ought to be date..
** Bazen sorunun kendisi budur: onlar dizelerdi.
Kötü:
kopyalayıp yapıştıramayacağımız bir MultiIndex eklemeyin (yukarıya bakın), bu pandaların varsayılan ekranıyla ilgili bir tür şikayettir, ancak yine de can sıkıcıdır:
In [11]: df Out[11]: C A B 1 2 3 2 6
Doğru yol, bir
set_index
çağrıya sıradan bir DataFrame eklemektir :In [12]: df = pd.DataFrame([[1, 2, 3], [1, 2, 6]], columns=['A', 'B', 'C']).set_index(['A', 'B']) In [13]: df Out[13]: C A B 1 2 3 2 6
İstediğiniz sonucu verirken ne olduğu konusunda fikir verin:
B A 1 1 5 0
Rakamları nasıl aldığınız konusunda net olun (bunlar nedir) ... doğru olup olmadıklarını iki kez kontrol edin.
Kodunuz bir hata verirse, tüm yığın izlemesini ekleyin (bu, çok gürültülü ise daha sonra düzenlenebilir). Satır numarasını (ve karşısına çıkan kodunuzun karşılık gelen satırını) gösterin.
Çirkin:
erişimimiz olmayan bir csv'ye bağlantı verme (ideal olarak harici bir kaynağa hiç bağlantı vermeyin ...)
df = pd.read_csv('my_secret_file.csv') # ideally with lots of parsing options
Verilerin çoğu tescillidir : Benzer verileri oluşturun ve sorunu yeniden üretip üretemeyeceğinizi görün (küçük bir şey).
"büyük" bir DataFrame'iniz olduğu gibi durumu belirsiz bir şekilde açıklamayın, geçerken sütun adlarından bazılarından bahsedin (dtypes'lerinden bahsetmeyin). Gerçek bağlamı görmeden tamamen anlamsız olan bir şey hakkında birçok ayrıntıya girmeye çalışın. Muhtemelen kimse bu paragrafın sonuna kadar okumayacak.
Yazılar kötüdür, küçük örneklerle daha kolaydır.
asıl sorunuza gelmeden önce 10+ (100+ ??) satır veri toplama eklemeyin.
Lütfen günlük işlerimizde bunu yeterince görüyoruz. Biz ancak, yardım isteyen değil böyle ... .
Giriş bölümünü kesin ve size sorun yaratan adımda ilgili DataFrame'leri (veya küçük sürümlerini) gösterin.
Her neyse, Python, NumPy ve Pandas'ı öğrenirken eğlenin!
Örnek veri kümeleri nasıl oluşturulur
Bu, esas olarak örnek veri çerçevelerini nasıl oluşturabileceğinize dair örnekler sunarak @ AndyHayden'ın cevabını genişletmektir. Pandalar ve (özellikle) numpy, size bunun için çeşitli araçlar sunar, öyle ki, genellikle sadece birkaç satır kodla herhangi bir gerçek veri kümesinin makul bir kopyasını oluşturabilirsiniz.
Numpy ve pandaları içe aktardıktan sonra, insanların verilerinizi ve sonuçlarınızı tam olarak yeniden üretebilmesini istiyorsanız rastgele bir tohum sağladığınızdan emin olun.
import numpy as np
import pandas as pd
np.random.seed(123)
Bir mutfak lavabosu örneği
İşte yapabileceğiniz çeşitli şeyleri gösteren bir örnek. Bunun bir alt kümesinden her türlü yararlı örnek veri çerçevesi oluşturulabilir:
df = pd.DataFrame({
# some ways to create random data
'a':np.random.randn(6),
'b':np.random.choice( [5,7,np.nan], 6),
'c':np.random.choice( ['panda','python','shark'], 6),
# some ways to create systematic groups for indexing or groupby
# this is similar to r's expand.grid(), see note 2 below
'd':np.repeat( range(3), 2 ),
'e':np.tile( range(2), 3 ),
# a date range and set of random dates
'f':pd.date_range('1/1/2011', periods=6, freq='D'),
'g':np.random.choice( pd.date_range('1/1/2011', periods=365,
freq='D'), 6, replace=False)
})
Bu şunları üretir:
a b c d e f g
0 -1.085631 NaN panda 0 0 2011-01-01 2011-08-12
1 0.997345 7 shark 0 1 2011-01-02 2011-11-10
2 0.282978 5 panda 1 0 2011-01-03 2011-10-30
3 -1.506295 7 python 1 1 2011-01-04 2011-09-07
4 -0.578600 NaN shark 2 0 2011-01-05 2011-02-27
5 1.651437 7 python 2 1 2011-01-06 2011-02-03
Bazı notlar:
np.repeat
venp.tile
(sütunlard
vee
) çok düzenli bir şekilde gruplar ve indeksler oluşturmak için çok kullanışlıdır. 2 sütun için bu, r'leri kolayca kopyalamak için kullanılabilir,expand.grid()
ancak aynı zamanda tüm permütasyonların bir alt kümesini sağlama yeteneği açısından daha esnektir. Ancak, 3 veya daha fazla sütun için sözdizimi hızlı bir şekilde kullanışsız hale gelir.- R yıllardan için daha doğrudan değiştirilmesi için
expand.grid()
bkzitertools
çözüm pandalar yemek kitabı veyanp.meshgrid
solüsyon gösterilen burada . Bunlar herhangi bir sayıda boyuta izin verecektir. - İle epey bir şey yapabilirsiniz
np.random.choice
. Örneğin, sütundag
, 2011'den itibaren rastgele 6 tarih seçimimiz var. Ek olarak,replace=False
bu tarihlerin benzersiz olduğundan emin olabiliriz - eğer bunu benzersiz değerlere sahip bir dizin olarak kullanmak istiyorsak çok kullanışlıdır.
Sahte borsa verileri
Yukarıdaki kodun alt kümelerini almaya ek olarak, hemen hemen her şeyi yapmak için teknikleri daha da birleştirebilirsiniz. Örneğin , aynı tarihleri kapsayan 4 hisse senedi için örnek ticker verilerini birleştiren np.tile
ve date_range
oluşturan kısa bir örnek :
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) })
Şimdi 100 satırlık örnek bir veri kümemiz var (her ticker başına 25 tarih), ancak bunu yapmak için yalnızca 4 satır kullandık, bu da 100 satır kod kopyalayıp yapıştırmadan herkesin yeniden üretmesini kolaylaştırıyor. Sorunuzu açıklamaya yardımcı oluyorsa, verilerin alt kümelerini görüntüleyebilirsiniz:
>>> stocks.head(5)
date price ticker
0 2011-01-01 9.497412 aapl
1 2011-01-02 10.261908 aapl
2 2011-01-03 9.438538 aapl
3 2011-01-04 9.515958 aapl
4 2011-01-05 7.554070 aapl
>>> stocks.groupby('ticker').head(2)
date price ticker
0 2011-01-01 9.497412 aapl
1 2011-01-02 10.261908 aapl
25 2011-01-01 8.277772 goog
26 2011-01-02 7.714916 goog
50 2011-01-01 5.613023 yhoo
51 2011-01-02 6.397686 yhoo
75 2011-01-01 11.736584 msft
76 2011-01-02 11.944519 msft
Bir Yanıtlayanın Günlüğü
Soru sormak için en iyi tavsiyem, soruları cevaplayan insanların psikolojisi üzerinde oynamak olacaktır. Bu insanlardan biri olarak, neden bazı sorulara cevap verdiğime ve neden başkalarına cevap vermediğime dair fikir verebilirim.
Motivasyonlar
Birkaç nedenden dolayı soruları cevaplamaya motive oluyorum
- Stackoverflow.com benim için son derece değerli bir kaynak oldu. Geri vermek istedim.
- Geri verme çabalarımda, bu siteyi eskisinden çok daha güçlü bir kaynak olarak buldum. Soruları cevaplamak benim için bir öğrenme deneyimidir ve öğrenmeyi seviyorum. Bu cevabı ve başka bir veterinerden gelen yorumu okuyun . Bu tür bir etkileşim beni mutlu ediyor.
- Puanları severim!
- 3 numaralı maddeye bakın.
- İlginç sorunları severim.
Tüm en saf niyetlerim harika ve hepsi ama 1 veya 30 soruyu yanıtlarsam bu memnuniyeti elde ederim. Seçimlerimi hangi soruların cevaplanacağına yönlendiren şey, büyük bir nokta maksimizasyonu bileşenine sahiptir.
Ayrıca ilginç problemler için de zaman harcayacağım, ancak bu çok az ve çok uzak ve ilginç olmayan bir soru için çözüme ihtiyaç duyan bir soruyu sormaya yardımcı olmuyor. Bir soruyu yanıtlamamı sağlamak için en iyi seçeneğiniz, bu soruyu olabildiğince az çabayla yanıtlayabilmem için olgunlaşmış bir tabakta sunmaktır. İki soruya bakıyorsam ve birinin kodu varsa, ihtiyacım olan tüm değişkenleri oluşturmak için kopyalayıp yapıştırabilirim ... Bunu alıyorum! Vaktim olursa diğerine geri döneceğim belki.
Ana Tavsiye
İnsanların soruları cevaplamasını kolaylaştırın.
- Gerekli değişkenleri oluşturan kod sağlayın.
- Bu kodu küçültün. Gönderiye bakarken gözlerim kayıyorsa, bir sonraki soruya geçiyorum ya da yaptığım her şeye geri dönüyorum.
- Ne istediğinizi düşünün ve spesifik olun. Doğal diller (İngilizce) kesin ve kafa karıştırıcı olduğu için ne yaptığınızı görmek istiyoruz. Doğal dil tanımındaki tutarsızlıkları çözmeye yardımcı olmak için denediklerinizin kod örnekleri.
- LÜTFEN ne beklediğinizi gösterin !!! Oturmalı ve bir şeyler denemeliyim. Bazı şeyleri denemeden bir sorunun cevabını neredeyse hiç bilemiyorum. Ne aradığına dair bir örnek görmezsem, soruyu iletebilirim çünkü tahmin etmek istemiyorum.
İtibarınız, itibarınızdan daha fazlasıdır.
Noktaları severim (yukarıda bahsetmiştim). Ancak bu noktalar gerçekten benim itibarım değil. Benim gerçek itibarım, sitedeki diğerlerinin benim hakkımda ne düşündüğünün bir karışımıdır. Adil ve dürüst olmaya çalışıyorum ve umarım başkaları da görebilir. Bunun bir asker için anlamı, soranların davranışlarını hatırlıyoruz. Cevapları seçmez ve iyi cevaplara oy vermezseniz, hatırlıyorum. Hoşlanmadığım veya benim sevdiğim şekillerde davranırsan, hatırlıyorum. Bu aynı zamanda cevaplayacağım sorulara da giriyor.
Her neyse, muhtemelen devam edebilirim, ama bunu gerçekten okuyan herkesi bağışlayacağım.
Zorluk SO sorularına yanıt vermenin en zorlu yönlerinden biri, problemi yeniden yaratmak için geçen süredir (veriler dahil). Verileri yeniden üretmenin net bir yolu olmayan soruların yanıtlanma olasılığı daha düşüktür. Bir soru yazmaya zaman ayırdığın ve yardım almak isteyeceğin bir sorunun olduğu göz önüne alındığında, daha sonra başkalarının probleminizi çözmek için kullanabileceği verileri sağlayarak kendinize kolayca yardımcı olabilirsiniz.
@Andy tarafından iyi Pandalar soruları yazmak için sağlanan talimatlar, başlamak için mükemmel bir yerdir. Daha fazla bilgi için, nasıl sorulacağına ve Minimal, Tam ve Doğrulanabilir örneklerin nasıl oluşturulacağına bakın .
Lütfen sorunuzu önceden açıkça belirtin. Sorunuzu ve herhangi bir örnek kodu yazmak için zaman ayırdıktan sonra, onu okumaya çalışın ve okuyucunuz için sorunu özetleyen ve soruyu açıkça belirten bir 'Yönetici Özeti' sağlayın.
Orijinal soru :
Bu verilere sahibim ...
Bunu yapmak istiyorum...
Sonucumun böyle görünmesini istiyorum ...
Ancak, [bunu] yapmaya çalıştığımda şu sorunu alıyorum ...
[Bunu] ve [şunu] yaparak çözüm bulmaya çalıştım.
Nasıl düzeltirim?
Verilerin miktarına, örnek koda ve sağlanan hata yığınlarına bağlı olarak, okuyucunun sorunun ne olduğunu anlamadan önce uzun bir yol kat etmesi gerekir. Sorunuzu, sorunun kendisi üstte olacak şekilde yeniden ifade etmeyi deneyin ve ardından gerekli ayrıntıları sağlayın.
Gözden Geçirilmiş Soru :
Soru: [Bunu] nasıl yapabilirim?
[Bunu] ve [şunu] yaparak çözüm bulmaya çalıştım.
[Bunu] yapmaya çalıştığımda şu sorunu alıyorum ...
Nihai sonuçlarımın böyle görünmesini istiyorum ...
İşte sorunumu yeniden üretebilecek bazı minimum kodlar ...
Ve işte örnek verilerimi nasıl yeniden oluşturacağım:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
GEREKİRSE ÖRNEK VERİ SAĞLAYIN !!!
Bazen gereken tek şey DataFrame'in sadece başı veya kuyruğudur. Başkaları tarafından çoğaltılabilen daha büyük veri kümeleri oluşturmak için @JohnE tarafından önerilen yöntemleri de kullanabilirsiniz. Hisse fiyatlarının 100 satırlık bir Veri Çerçevesi oluşturmak için örneğini kullanarak:
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) })
Bu sizin gerçek verilerinizse, veri çerçevesinin başını ve / veya kuyruğunu aşağıdaki gibi eklemek 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 sağlamak 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ı belirlemesini kolaylaştırır (ör. Tarihler, dize, tarih saat64 ve 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 MultiIndex varsa:
DataFrame'inizde çoklu dizin varsa, aramadan önce sıfırlamanız gerekir to_dict
. Daha sonra aşağıdakileri kullanarak dizini 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
İşte dput
Pandalar için tekrarlanabilir raporlar üretmek için standart R aracı olan versiyonum DataFrame
. Muhtemelen daha karmaşık çerçevelerde başarısız olacak, ancak işi basit durumlarda yapıyor gibi görünüyor:
import pandas as pd
def dput(x):
if isinstance(x,pd.Series):
return "pd.Series(%s,dtype='%s',index=pd.%s)" % (list(x),x.dtype,x.index)
if isinstance(x,pd.DataFrame):
return "pd.DataFrame({" + ", ".join([
"'%s': %s" % (c,dput(x[c])) for c in x.columns]) + (
"}, index=pd.%s)" % (x.index))
raise NotImplementedError("dput",type(x),x)
şimdi
df = pd.DataFrame({'a':[1,2,3,4,2,1,3,1]})
assert df.equals(eval(dput(df)))
du = pd.get_dummies(df.a,"foo")
assert du.equals(eval(dput(du)))
di = df
di.index = list('abcdefgh')
assert di.equals(eval(dput(di)))
Not bu çok daha ayrıntılı çıktı ürettiğini DataFrame.to_dict
örneğin,
pd.DataFrame({ 'foo_1':pd.Series([1, 0, 0, 0, 0, 1, 0, 1],dtype='uint8',index=pd.RangeIndex(start=0, stop=8, step=1)), 'foo_2':pd.Series([0, 1, 0, 0, 1, 0, 0, 0],dtype='uint8',index=pd.RangeIndex(start=0, stop=8, step=1)), 'foo_3':pd.Series([0, 0, 1, 0, 0, 0, 1, 0],dtype='uint8',index=pd.RangeIndex(start=0, stop=8, step=1)), 'foo_4':pd.Series([0, 0, 0, 1, 0, 0, 0, 0],dtype='uint8',index=pd.RangeIndex(start=0, stop=8, step=1))}, index=pd.RangeIndex(start=0, stop=8, step=1))
vs
{'foo_1': {0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 1, 6: 0, 7: 1}, 'foo_2': {0: 0, 1: 1, 2: 0, 3: 0, 4: 1, 5: 0, 6: 0, 7: 0}, 'foo_3': {0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 0, 6: 1, 7: 0}, 'foo_4': {0: 0, 1: 0, 2: 0, 3: 1, 4: 0, 5: 0, 6: 0, 7: 0}}
için du
tanımlandıkları gibidir, ama bu sütun türlerini korur . Örneğin, yukarıdaki test durumunda,
du.equals(pd.DataFrame(du.to_dict()))
==> False
Çünkü du.dtypes
olduğunu uint8
ve pd.DataFrame(du.to_dict()).dtypes
bir int64
.