Pandas: Veri Türleri Üzerindeki Perdeyi Kaldırın
Merhabalar bu yazımızda: “Pandas dataframe veri türlerini nasıl görebiliriz?” sorusunun cevabını iki farklı yöntemi mukayese ederek öğreneceğiz. Aslında bir nevi pandas dataframe şeması üzerinde keşif yapacağız. “Okudum veriyi oldu bitti” deyip dümdüz, tam gaz ilerlemeyin. İleride başınıza neler gelebilir dikkat edin.
Aslında dataframe nesnesinin dtypes özelliği var oradan çok kolay veri türlerini öğrenebiliriz niçin böyle basit bir konuda yazı yazıyorsunuz diyebilirsiniz? Evet haklısınız ancak yazının ilerleyen bölümlerinde bana hak vereceğinizi düşünüyorum. Çünkü dtypes gerçekten bazı veri türlerini gizliyor.
Pandas dataframe büyük veri dünyasının haricinde neredeyse veri manipülasyonunun tek adresi. Çok gelişmiş yetenekleri var. Tabiri caizse veriye takla attırıyorsunuz. Veri ile uğraşıyorsanız verinin seyri boyunca şemayı mutlaka göz altında tutmalısınız. Yaptığınız dönüşümler şemayı da değiştirebilir ve bu ilerleyen aşamalarda karşınıza hata olarak gelebilir.
Birazdan bir örnek yapacağız. Örneğimizde bir dataframe üzerinden 2 farklı şema nasıl oluyor göreceğiz.
Örnek veriyi çocukluğumun en popüler oyuncusu Cüneyt Arkın ve Kara Murat karakterinden esinlenerek biraz sallamasyon oluşturdum. Tutarsızlıklar varsa kusura bakmayın. Ancak bu işin gırgırı tabi asıl olan veri türleri onlara odaklanacağız.
Veri:
data = { "user_id": [251], "first_name": ["Murat"], "last_name": ["Fedai"], "nick_name": "Kara Murat", "summary": ["Fatih'in fedaisi."], "birth_place": ["Çorum"], "photo_url": ["/photos/7/000/253/05b/308dd6e.jpg"], "served_years_places": [ [ {"year": 1461, "place": "Arnavutluk"}, {"year": 1464, "place": "Bosna Hersek"}] ], "education": [ [ {"school_name": "Çorum Sıbyan Mektebi", "start": 1441, "end": 1445, "city": "Çorum"}, {"school_name": "Fatih Medresesi", "start": 1455, "end": 1457, "city": "İstanbul"} ], ], "contact_info": [ { "blog": "http://karamuratbenim.com", "twitter": "http://twitter.com/KaraMurat" }], "horses": [ '{ "name": "Gelincik"}'] }
Birazdan bu dictionary yapısını pandas dataframe haline getireceğiz ancak ondan önce veri türlerini çıplak gözle bir inceleyelim:
user_id -> int first_name -> string last_name -> string nick_name -> string summary -> string birth_place -> string photo_url -> string served_years_places -> list(her bir elemanı dictionary) education -> list(her bir elemanı dictionary) contact_info -> dictionary horses -> string (dictionary gibi görünüyor ama dışarıdaki tek tırnaklar string yapıyor)
Şimdi de pandas dataframe oluşturalım.
df = pd.DataFrame(data=data)
Dataframe olarak görelim
df.head()
Şimdi diyelim ki ey pandas bize sen söyle veri türlerini. Bunun için yaygın iki yöntem var: df.dtypes ve df.info(). dtypes kullanalım.
Komut: df.dtypes Çıktı: user_id int64 first_name object last_name object nick_name object summary object birth_place object photo_url object served_years_places object education object contact_info object horses object
Yukarıda gördüğümüz gibi her şeye object diyor. Peki ne var bu object’ler içinde? Nasıl öğrenebiliriz? Bir for döngüsü ile bu objelerin içindeki gerçek python veri tiplerini görebiliriz. Bu çıplak gözümüz ile yaptığımız incelemeye çok yakın olacaktır.
Komut: for i in df.columns: print(df[i].apply(lambda x: type(x)).head(1)) Çıktı: 0 <class 'int'> Name: user_id, dtype: object 0 <class 'str'> Name: first_name, dtype: object 0 <class 'str'> Name: last_name, dtype: object 0 <class 'str'> Name: nick_name, dtype: object 0 <class 'str'> Name: summary, dtype: object 0 <class 'str'> Name: birth_place, dtype: object 0 <class 'str'> Name: photo_url, dtype: object 0 <class 'list'> Name: served_years_places, dtype: object 0 <class 'list'> Name: education, dtype: object 0 <class 'dict'> Name: contact_info, dtype: object 0 <class 'str'> Name: horses, dtype: object
Şimdi sadece bir farka değinip kapanış yapalım. dtypes, bize horses ve contact_info için object demişti (basit veri türlerinde object’i string olarak yorumlamaya eğilimliyizdir) ancak gerçekte contact_info’nun dictionary, horses’un ise string olduğunu öğrendik. Aslına bakarsanız horses da dictionary olmalı, ancak bir şekilde dışına tek tırnak gelmiş, o yüzden string. Onu da tek tırnaklardan kurtarıp gerçek hüviyetine kavuşturmalısınız. Diğer farklılıkların incelemesini sizlere bırakıyorum ve bitiriyorum.
Kıssadan hisse:
Gerçek veri türleri pandas tarafından perdeleniyor, işe koyulmadan önce mutlaka gerçek veri türlerinin ne olduğunu bilmeliyiz.
Başka bir yazıda görüşmek dileğiyle…
Kapak Görseli: Petter Rudwall on Unsplash