Pandas DataFrame oluşturma sanatında ustalaşın. Bu kılavuz, küresel veri uzmanları için sözlüklerden, listelerden, NumPy dizilerinden ve daha fazlasından DataFrame'lerin başlatılmasını kapsar.
Pandas DataFrame Oluşturma: Veri Yapısı Başlatmasına Derinlemesine Bir Bakış
Python ile veri manipülasyonu dünyasına hoş geldiniz! Neredeyse her veri analizi görevinin kalbinde Pandas kütüphanesi ve onun temel taşı olan DataFrame bulunur. Bir DataFrame'i, Python ortamınızın içinde yaşayan, akıllı, güçlü ve esnek bir elektronik tablo veya veritabanı tablosu sürümü olarak düşünün. Verileri temizlemek, dönüştürmek, analiz etmek ve görselleştirmek için kullanılan birincil araçtır. Ancak bu veri sihrini gerçekleştirmeden önce, öncelikle bir DataFrame oluşturma sanatında ustalaşmanız gerekir. Bu temel veri yapısını nasıl başlattığınız, tüm analizinizin temelini oluşturabilir.
Bu kapsamlı kılavuz, istekli ve pratik veri analistleri, bilim adamları ve mühendislerden oluşan küresel bir kitle için tasarlanmıştır. Pandas DataFrame'leri sıfırdan oluşturmanın en yaygın ve güçlü yöntemlerini keşfedeceğiz. Verileriniz bir sözlükte, bir listede, bir NumPy dizisinde veya başka bir biçimde olsun, bu makale size DataFrame'lerinizi güvenle ve verimli bir şekilde başlatmanız için gerekli bilgi ve pratik örnekleri sağlayacaktır. Temelimizi inşa edelim.
Pandas DataFrame Tam Olarak Nedir?
İnşa etmeye başlamadan önce, ne inşa ettiğimizi açıklığa kavuşturalım. Pandas DataFrame, iki boyutlu, boyutu değiştirilebilir ve potansiyel olarak heterojen bir tablo veri yapısıdır. Bunu parçalayalım:
- İki Boyutlu: Tıpkı bir elektronik tablo gibi satırları ve sütunları vardır.
- Boyutu Değiştirilebilir: DataFrame oluşturulduktan sonra satır ve sütun ekleyebilir veya kaldırabilirsiniz.
- Heterojen: Sütunlar farklı veri türlerine sahip olabilir. Örneğin, bir sütun sayılar (tamsayılar veya kayan sayılar) içerebilir, diğeri metin (dizeler) içerebilir ve üçüncüsü tarihler veya boolean değerleri (Doğru/Yanlış) içerebilir.
Bir DataFrame'in üç temel bileşeni vardır:
- Veri: Yapı içinde tutulan, satır ve sütunlar halinde düzenlenmiş gerçek değerler.
- Dizin: Satırların etiketleri. Bir dizin sağlamazsanız, Pandas 0'dan başlayarak varsayılan bir dizin oluşturur. Dizin, verilere erişmek ve hizalamak için güçlü bir yol sağlar.
- Sütunlar: Sütunların etiketleri. Bunlar, DataFrame içindeki belirli veri serilerine erişmek için çok önemlidir.
Bu yapıyı anlamak, DataFrame'leri nasıl etkili bir şekilde oluşturacağınızı ve manipüle edeceğinizi anlamanın anahtarıdır.
Temel: Pandas'ı İçe Aktarma
Öncelikle, Pandas'ı kullanmak için kütüphaneyi Python betiğinize veya not defterinize aktarmanız gerekir. Dünya çapındaki profesyoneller tarafından izlenen evrensel olarak kabul görmüş kural, onu pd takma adıyla içe aktarmaktır. Bu basit takma ad, kodunuzu daha okunabilir ve öz hale getirir.
import pandas as pd
import numpy as np # Genellikle Pandas ile birlikte kullanılır, bu yüzden onu da içe aktaracağız.
Bu tek satırla, Pandas kütüphanesinin tüm gücünü açtınız. Şimdi, bu kılavuzun özüne gelelim: DataFrame'ler oluşturmak.
Temel Oluşturma Yöntemleri: Basitten Karmaşığa
pd.DataFrame() yapıcısı inanılmaz derecede çok yönlüdür. Birçok farklı türde girdi kabul edebilir. Şimdi en yaygın olandan daha özel durumlara geçerek en temel yöntemleri keşfedeceğiz.
1. Liste veya Dizi Sözlüğünden DataFrame Oluşturma
Bu, tartışmasız bir şekilde bir DataFrame oluşturmanın en yaygın ve sezgisel yöntemidir. Anahtarların sütun adları olacağı ve değerlerin her sütunun verilerini içeren listeler (veya NumPy dizileri veya Pandas Serileri) olacağı bir Python sözlüğüyle başlarsınız.
Nasıl çalışır: Pandas, her sözlük anahtarını bir sütun başlığına ve her değer listesini o sütunun satırlarına eşler. Burada kritik bir gereklilik, tüm listelerin aynı uzunlukta olmasıdır, çünkü her liste tam bir veri sütununu temsil eder.
Örnek:
Dünya çapındaki farklı şehirler hakkında bilgi içeren bir DataFrame oluşturalım.
# Veriler sütuna göre düzenlenmiştir
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# DataFrame'i oluştur
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Çıktı:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 São Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
Temel Çıkarım: Verileriniz doğal olarak özelliğe veya kategoriye göre düzenlendiğinde bu yöntem mükemmeldir. Temiz, okunabilir ve sözlüğünüzün yapısını doğrudan bir tablo biçimine çevirir.
2. Sözlük Listesinden DataFrame Oluşturma
Alternatif ve eşit derecede güçlü bir yöntem, her öğenin bir sözlük olduğu bir liste kullanmaktır. Bu yapıda, her sözlük tek bir satırı temsil eder ve anahtarları o satırın verileri için sütun adlarını temsil eder.
Nasıl çalışır: Pandas listede yinelenir. Her sözlük için yeni bir satır oluşturur. Sözlük anahtarları sütunları belirlemek için kullanılır. Bu yöntem inanılmaz derecede esnektir, çünkü bir sözlükte bir anahtar eksikse, Pandas bu hücreyi karşılık gelen satırda NaN (Sayı Değil) ile otomatik olarak doldurur; bu, Pandas'ta eksik veriler için standart işaretleyicidir.
Örnek:
Aynı şehir verilerini temsil edelim, ancak bu sefer kayıtların listesi olarak yapılandırılmış.
# Veriler satır (kayıt) bazında düzenlenmiştir
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'São Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Farklı yapıya dikkat edin
]
# DataFrame'i oluştur
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Çıktı:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 São Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Pandas'ın tutarsızlıkları nasıl zarifçe ele aldığına dikkat edin. Şangay'ın 'Is_Coastal' değeri NaN çünkü sözlüğünde eksikti. Kahire için yeni bir 'Timezone' sütunu oluşturuldu ve diğer tüm şehirler için NaN değeri atandı. Bu, onu API'lerden gelen JSON yanıtları gibi yarı yapılandırılmış verilerle çalışmak için mükemmel bir seçim haline getirir.
Temel Çıkarım: Verileriniz bir dizi kayıt veya gözlem olarak geldiğinde bu yöntemi kullanın. Eksik verileri ve kayıt yapısındaki varyasyonları işlemede sağlamdır.
3. NumPy Dizisinden DataFrame Oluşturma
Bilimsel bilişim, makine öğrenimi veya yoğun sayısal işlemler içeren herhangi bir alanda çalışanlar için veriler genellikle NumPy dizilerinde bulunur. Pandas, NumPy üzerine inşa edilmiştir, bu da ikisi arasındaki entegrasyonu kusursuz ve son derece verimli hale getirir.
Nasıl çalışır: pd.DataFrame() yapıcısına 2B bir NumPy dizisi iletirsiniz. Varsayılan olarak, Pandas tamsayı tabanlı dizinler ve sütunlar oluşturacaktır. Ancak, index ve columns parametrelerini kullanarak anlamlı etiketler sağlayabilirsiniz (ve sağlamanız gerekir).
Örnek:
Zaman içindeki sensör okumalarını temsil eden rastgele oluşturulmuş 5x4'lük bir NumPy dizisinden bir DataFrame oluşturalım.
# Rastgele verilerle 5x4'lük bir NumPy dizisi oluştur
data_np = np.random.rand(5, 4)
# Sütun ve dizin etiketlerini tanımla
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# DataFrame'i oluştur
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Çıktı (rastgele sayılar farklı olacaktır):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
Bu örnekte, güçlü bir özelliği de tanıttık: Pandas'ta zaman tabanlı çok çeşitli analiz özelliklerinin kilidini açan zaman serisi verileri için bir DatetimeIndex kullanmak.
Temel Çıkarım: Bu, homojen sayısal verilerden bir DataFrame oluşturmak için en bellek açısından verimli yöntemdir. NumPy, Scikit-learn veya TensorFlow gibi kütüphanelerle arabirim oluştururken standart seçimdir.
4. Liste Listesinden DataFrame Oluşturma
Bu yöntem kavramsal olarak bir NumPy dizisinden oluşturmaya benzer, ancak standart Python listeleri kullanır. İç içe geçmiş bir liste biçiminde depolanan tablo verilerini dönüştürmenin basit bir yoludur.
Nasıl çalışır: Her iç listenin bir veri satırını temsil ettiği bir liste sağlarsınız. NumPy dizilerinde olduğu gibi, netlik için columns parametresi aracılığıyla sütun adlarını belirtmeniz şiddetle tavsiye edilir.
Örnek:
# Satırların listesi olarak veri
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Sütun adlarını tanımla
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# DataFrame'i oluştur
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Çıktı:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Temel Çıkarım: Verileriniz zaten başlıkları olmayan bir dosya biçiminden okurken olduğu gibi bir satır listesi olarak yapılandırıldığında bu basit ve etkili bir yöntemdir.
Gelişmiş Başlatma: DataFrame'inizi Özelleştirme
Ham verileri sağlamanın ötesinde, pd.DataFrame() yapıcısı, yeni DataFrame'inizin yapısını ve özelliklerini oluşturulduğu andan itibaren kontrol etmek için çeşitli parametreler sunar.
Dizini Belirtme
index parametresini zaten çalışırken gördük. Dizin, hızlı aramalar, veri hizalaması ve daha fazlası için kullanılan satırların etiketlerini sağlayan DataFrame'in çok önemli bir parçasıdır. Pandas varsayılan sayısal bir dizin (0, 1, 2, ...) sağlarken, anlamlı bir dizin ayarlamak verilerinizle çalışmayı çok daha kolay hale getirebilir.
Örnek: Liste sözlüğü örneğimizi yeniden kullanalım, ancak City sütununu oluşturma sırasında dizin olarak ayarlayalım.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai']
# Özel bir dizinle DataFrame'i oluştur
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Çıktı:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
São Paulo Brazil 22.4 False
Mumbai India 20.9 True
Artık, örneğin df_with_index.loc['Tokyo'] ile bu anlamlı etiketleri kullanarak satır verilerine erişebilirsiniz.
Veri Türlerini Kontrol Etme (`dtype`)
Pandas, veri türlerini (örneğin, sayıları, metni ve boole değerlerini tanıma) çıkarmada oldukça iyidir. Ancak, bazen bellek verimliliğini sağlamak veya belirli işlemleri etkinleştirmek için bir sütun için belirli bir veri türünü zorlamanız gerekir. dtype parametresi size bu kontrolü sağlar.
Örnek: Sayı gibi görünen ancak metin (dizeler) olarak ele alınması gereken ürün kimliklerimiz olduğunu hayal edin.
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# 'ProductID' için bir dtype belirtirken DataFrame'i oluştur
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Çıktı:
ProductID object Stock int32 dtype: object
Pandas'ta str'nin object olarak temsil edildiğine dikkat edin. dtype'ı açıkça ayarlayarak, Pandas'ın ProductID'yi bir sayı olarak ele almasını önleriz; bu, daha sonra yanlış hesaplamalara veya sıralama sorunlarına yol açabilir. Varsayılan int64 yerine int32 gibi daha spesifik tamsayı türlerini kullanmak, büyük veri kümeleriyle önemli miktarda bellek de tasarruf edebilir.
Pratik Senaryolar ve En İyi Uygulamalar
Doğru oluşturma yöntemini seçmek, verilerinizin orijinal biçimine bağlıdır. İşte basit bir karar verme kılavuzu:
- Verileriniz sütunlarda mı (örneğin, özellik başına bir liste)? Bir liste sözlüğü kullanın. Doğal bir uyumdur.
- Verileriniz bir dizi kayıt mı (örneğin, bir JSON API'sinden)? Bir sözlük listesi kullanın. Kayıtlardaki eksik veya fazladan alanları işlemede mükemmeldir.
- Verileriniz sayısal mı ve bir ızgarada mı (örneğin, bilimsel bir hesaplamadan)? Bir NumPy dizisi kullanın. Bu kullanım durumu için en yüksek performanslı seçenektir.
- Verileriniz basit bir satır satır tablo biçiminde ve başlıklar olmadan mı? Bir liste listesi kullanın ve sütun adlarını ayrı olarak sağlayın.
Kaçınılması Gereken Yaygın Tuzaklar
- Liste Sözlüğünde Eşit Olmayan Uzunluklar: Bu yaygın bir hatadır. Bir liste sözlüğünden DataFrame oluştururken, her listenin tam olarak aynı sayıda öğeye sahip olması gerekir. Aksi takdirde, Pandas bir
ValueErroryükseltecektir. Oluşturmadan önce her zaman sütun verilerinizin eşit uzunlukta olduğundan emin olun. - Dizini Yoksayma: Varsayılan 0 tabanlı dizine güvenmek birçok durumda iyidir, ancak verilerinizde doğal bir tanımlayıcı varsa (bir Ürün Kimliği, Kullanıcı Kimliği veya belirli bir Zaman Damgası gibi), başlangıçtan itibaren dizin olarak ayarlamak daha sonra kodunuzu basitleştirebilir.
- Veri Türlerini Unutma: Pandas'ın türleri çıkarmasına izin vermek çoğu zaman işe yarar, ancak büyük veri kümeleri veya karışık türlere sahip sütunlar için performans düşebilir. Belleği kaydetmek ve hataları önlemek için kategori, dize veya belirli sayısal türler olarak ele alınması gereken sütunlar için
dtype'ı ayarlama konusunda proaktif olun.
Başlatmanın Ötesinde: Dosyalardan DataFrame Oluşturma
Bu kılavuz, bellek içi Python nesnelerinden DataFrame'ler oluşturmaya odaklanırken, gerçek dünya senaryolarının çoğunda verilerinizin harici bir dosyadan geleceğini bilmek çok önemlidir. Pandas bu amaç için bir dizi yüksek oranda optimize edilmiş okuyucu işlevi sağlar, bunlar arasında:
pd.read_csv(): Virgülle ayrılmış değerler dosyaları için, veri içe aktarımının yapı taşı.pd.read_excel(): Microsoft Excel elektronik tablolarından veri okumak için.pd.read_json(): JSON dosyalarından veya dizelerden veri okumak için.pd.read_sql(): Bir veritabanı sorgusunun sonuçlarını doğrudan bir DataFrame'e okumak için.pd.read_parquet(): Verimli, sütun odaklı Parquet dosya biçiminden okumak için.
Bu işlevler, Pandas yolculuğunuzda bir sonraki mantıksal adımdır. Bunlarda ustalaşmak, neredeyse herhangi bir kaynaktan verileri güçlü bir DataFrame yapısına almanıza olanak tanır.
Sonuç: Veri Ustalığı İçin Temeliniz
Pandas DataFrame, Python'daki herhangi bir ciddi veri çalışması için merkezi veri yapısıdır. Gördüğümüz gibi, Pandas bu yapıları çok çeşitli biçimlerden başlatmak için esnek ve sezgisel bir araç seti sunar. Sözlüklerden, listelerden ve NumPy dizilerinden bir DataFrame'i nasıl oluşturacağınızı anlayarak, veri analizi projeleriniz için sağlam bir temel oluşturdunuz.
Önemli olan, verilerinizin orijinal yapısına en uygun yöntemi seçmektir. Bu sadece kodunuzu daha temiz ve daha okunabilir hale getirmekle kalmaz, aynı zamanda daha verimli hale getirir. Buradan, veri temizleme, keşfetme, dönüştürme ve görselleştirme gibi heyecan verici görevlere geçmeye hazırsınız. Mutlu kodlamalar!