Anasayfa / Uygulama Araçları / Python / Python Pandas ile Temel İşlemler

Python Pandas ile Temel İşlemler

Bölüm 1 – Dosya Okuma & Sütun İsimlendirme

Pandas; veri analizi ve veri ön işlemeyi kolaylaştıran  açık kaynak kodlu bir kütüphanedir. Dil olarak Python kullanır. Pandas dağıtık işlemeye uygun değildir. Bu sebeple işleyeceğiniz verinin büyüklüğü makinenin kapasitesiyle sınırlıdır, özellikle de ana belleğin. Ben büyük veri setleri üzerinde işlem yaptığım için Pandas’ı çok fazla kullanamıyorum ancak bazı ufak tefek işleri yapıyorum yine de. Bu yazımda Pandas ile temel olarak neler yapılabilir, daha doğrusu ben çoğunlukla neler yapıyorum sizlerle paylaşacağım.

import pandas as pd

Pandas ile csv Dosyası Okumak

csv dosyamızı okuyalım ve bir değişkene atayalım. Dosyayı buradan indirebilirsiniz.

ufo = pd.read_csv('http://www.datascience.istanbul/data/uforeports.csv')

head() metodu ile veri setimizin ilk beş kaydına bir bakalım.

ufo.head()
 CityColors ReportedShape ReportedStateTime
0IthacaNaNTRIANGLENY6/1/1930 22:00
1WillingboroNaNOTHERNJ6/30/1930 20:00
2HolyokeNaNOVALCO2/15/1931 14:00
3AbileneNaNDISKKS6/1/1931 13:00
4New York Worlds FairNaNLIGHTNY4/18/1933 19:00

Veri setimiz kaç satır, kaç sütun yani boyutları nedir shape niteliğinden öğreniyoruz.

ufo.shape
(18241, 5)

Pandas ile csv Dosyasından Belirli Sütunları Okumak

Veri setindeki bazı niteliklerle işimiz yok ise en başta okurken sadece işimize yarayanları okuyabiliriz. Bunun için read_csv() metoduna sadece bir argüman eklememiz yeterli. Bu argüman bir liste ve bu listede seçilmek istenen sütun isimleri bulunur.

ufo_two_cols = pd.read_csv('http://www.datascience.istanbul/data/uforeports.csv', usecols=['State','Time'])

Pandas ile Sütun İsimlerini Değiştirmek

Haydi sütun isimlerini Türkçe yapalım. Öncelikle beş tane sütun isminin Türkçe karşılıklarını bir Python listesine atacağız. Sonra da bu listedeki isimleri veri setimizin sütun isimleriyle değiştireceğiz.

turkce_sutun_isimleri = ['Sehir','Renk','Sekil','Eyalet','Zaman']
ufo.columns = turkce_sutun_isimleri

Sonucu head() metoduyla hep beraber görelim.

ufo.head()
 SehirRenkSekilEyaletZaman
0IthacaNaNTRIANGLENY6/1/1930 22:00
1WillingboroNaNOTHERNJ6/30/1930 20:00
2HolyokeNaNOVALCO2/15/1931 14:00
3AbileneNaNDISKKS6/1/1931 13:00
4New York Worlds FairNaNLIGHTNY4/18/1933 19:00

Pandas ile Sütun Seçmek

Seçme işlemini iki yöntemle yapıyoruz. Mesela Sehir sütununu seçelim:

ufo['Sehir'] veya
ufo.Sehir
0                      Ithaca
1                 Willingboro
2                     Holyoke
3                     Abilene
...
18237             Spirit Lake
18238             Eagle River
18239             Eagle River
18240                    Ybor
Name: Sehir, dtype: object

Sonuç yukarıda görüldüğü gibidir. Aslında daha uzun bir liste görülür ancak ben makalemi kısa tutmak adına daha azını buraya aldım. İki yöntemin kullanımı şu şekilde farklılaşabilir. Eğer sütun isminiz boşluk içeriyorsa mutlaka köşeli parantez kullanmalısınız. Nitelik kullanımı ise ancak boşluksuz sütun isimlerinde kullanılabilir.

Pandas ile Sütun Birleştirmek

Şehir ve Eyalet sütunlarını tek sütun altında birleştirmek isteyelim ve bu sütunları virgülle ayıralım.

ufo['SehirEyalet'] = ufo.Eyalet + ', ' + ufo.Sehir
 SehirRenkSekilEyaletZamanSehirEyalet
0IthacaNaNTRIANGLENY6/1/1930 22:00NY, Ithaca
1WillingboroNaNOTHERNJ6/30/1930 20:00NJ, Willingboro
2HolyokeNaNOVALCO2/15/1931 14:00CO, Holyoke
3AbileneNaNDISKKS6/1/1931 13:00KS, Abilene
4New York Worlds FairNaNLIGHTNY4/18/1933 19:00NY, New York Worlds Fair

yukarıdaki tabloda görüldüğü gibi SehirEyalet adında yeni bir sütun oluştu.

Pandas ile Veri Setindeki Veri Tiplerini  Yazdırmak

Veri setinde hangi nitelikler var ve bunların türü nedir görmek için dtypes niteliğini kullanıyoruz. Sonuç bir nevi şema gibi aslında. Bundan önce veri setimizde farklı bir nitelik türü olması açısından id sütunu ekleyelim. id sütununda satır sayısı kadar bir bir artan rakamlar olacak.

ufo['id'] = range(0,18241)

range(0,18241) fonksiyonu 0’dan 18241’e kadar bir liste oluşturdu ve bu listeyi alıp sütun halinde id niteliğinin altına ufo[‘id’] komutuyla koyduk. Şimdi veri türlerini yazdırabiliriz.

ufo.dtypes
Sehir          object
Renk           object
Sekil          object
Eyalet         object
Zaman          object
SehirEyalet    object
id              int64
dtype: object

Pandas ile Sütunları Yeniden Adlandırmak

Yukarıda sütun isimlerini tamamen değiştirmiş ve Türkçe yapmıştık. Şimdi ise sütun isimlerini değiştireceğiz. Bunun için rename() metodunu kullanacağız. Aşağıda Sehir sütun ismini değiştirerek Sehir_Yeni yapacak kodu bulacaksınız.

ufo.rename(columns ={'Sehir':'Sehir_Yeni'},inplace=True)

Kontrol edelim değişmiş mi?

ufo.columns
Index([u'Sehir_Yeni', u'Renk', u'Sekil', u'Eyalet', u'Zaman', u'SehirEyalet',u'id'], dtype='object')

Evet değişmiş. Şimdilik burada kesiyorum. Aşağıdan 2. sayfaya tıklayarak yeni bölüme bakabilirsiniz. Veriyle kalın…

Hakkında Erkan ŞİRİN

2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Halihazırda İmpektra Bilişim A.Ş.'de büyük veri yöneticisi olarak çalışmakta olup aynı zamanda Gazi Üniversitesi Yönetim Bilişim Sistemleri doktora öğrencisidir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete eğitimler vermekte ve projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık tespiti, sahtecilik tespiti, veri hazırlama sürecidir.

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Apache Spark Elasticsearch Entegrasyonu

Merhabalar. Bu yazımızda csv dosyasından okuduğumuz bir veri setini Elasticsearch’e bir index olarak yazacağız ve …

2 yorumlar

  1. Mehaba. yukarıda türkçe sütun isimlerini değiştirmeden önce sütun sayısını 2’ye düşürdüğünüz için uyarı veriyor. Dolayısıyla sütun sayısını düşürmeden isim değişikliği yaptım. Bilginize. paylaşımlarınız için tşk ederim.

    • Erkan ŞİRİN

      Merhaba. Haklısınız. Düzeltme yaptım. İki sütun için dataframe’i “ufo_two_cols” ismiyle tuttuk. Çok teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir