-
- Seri nedir?
- Seri oluşturma
- Seri İndeksleme ve Dilimleme
- Seri Özellikleri ve Metodları
head()
vetail()
describe()
value_counts()
unique()
-
- Veri çerçevesi nedir?
- Veri çerçevesi oluşturma
- Veri Çerçevesi İndeksleme ve Dilimleme
- Veri Çerçevesi Özellikleri ve Metodları
info()
head()
vetail()
describe()
shape
columns
index
- CSV dosyalarından veri okuma
- Excel dosyalarından veri okuma
- Veri çerçevesini CSV ve Excel formatlarında kaydetme
- İlk ve Son Gözlemleri Görüntüleme
- Satır ve Sütun Sayısı Bilgisi Alma: shape
- Veri Seti Hakkında Detaylı Bilgi Alma: info()
- Sütun ve Satır Gösterimi Ayarları: pd.set_option()
5. Satır ve Sütunlara Erişim İşlemleri
-
Sütun Güncelleme: columns, List Comprehension, str.replace(), rename
-
Satır Güncelleme: loc, at, str.lower(), apply(), applymap(), lambda, map() ve replace()
9. Sütun ve Satır Ekleme ve Kaldırma
Pandas'ı yüklemek için pip
veya conda
kullanabiliriz. Bu kurulumlar, Python ortamınıza pandas kütüphanesini ekler.
Pip, Python paketlerinin yönetiminde sıkça kullanılan bir araçtır. Aşağıdaki komutu kullanarak pandas'ı pip aracılığıyla kurabilirsiniz:
pip install pandas
Conda, Anaconda veya Miniconda gibi dağıtımlarla birlikte gelen bir paket yöneticisidir. Aşağıdaki komutu kullanarak pandas'ı conda aracılığıyla kurabilirsiniz:
conda install pandas
Bu komutlar, pandas kütüphanesinin en son sürümünü indirir ve yükler.
import pandas as pd
Pandas kütüphanesi iki ana veri yapısı sunar: Seriler (Series) ve Veri Çerçeveleri (DataFrames). Bu seri, indekslerle (varsayılan olarak 0'dan başlar) etiketlenmiş değerler içerir.
- Pandas'ta Series veri yapısı, tek boyutlu, indekslenmiş ve değiştirilemeyen (immutable) veri dizilerini temsil eder. Her bir eleman, bir indeksle ilişkilendirilmiştir. Örneğin Bu seri, indekslerle (varsayılan olarak 0'dan başlar) etiketlenmiş değerler içerir:
seri = pd.Series([10, 20, 30, 40, 50])
print(seri)
0 10
1 20
2 30
3 40
4 50
dtype: int64
Pandas Series Yapısı Özellikleri:
-
Tek Boyutlu Veri Yapısı: Pandas Series, yalnızca tek bir boyutta veri saklar.
-
Indekslenmiş Veriler: Her eleman, bir indeksle eşleştirilmiştir. Önceden tanımlı veya özel bir indeks kullanılabilir.
-
Homojen Veri Tipleri: Series, herhangi bir veri tipinde veri saklayabilir. Örneğin, tam sayılar, kayan nokta sayıları, dizeler veya diğer Python veri tipleri olabilir.
-
Değiştirilemeyen (Immutable): Bir Series oluşturulduktan sonra, içeriği değiştirilemez. Ancak yeni bir Series oluşturularak değişiklik yapılabilir.
- Pandas serileri, çeşitli veri tiplerinden oluşturulabilir.
import pandas as pd
data = [1, 2, 3, 4, 5]
seri = pd.Series(data)
print(seri)
0 1
1 2
2 3
3 4
4 5
dtype: int64
import pandas as pd
import numpy as np
data = np.array([1, 2, 3, 4, 5])
seri = pd.Series(data)
print(seri)
0 1
1 2
2 3
3 4
4 5
dtype: int32
- Pandas serileri, indeksleme ve dilimleme işlemleri için kullanılabilir.
print(seri[0], "\n") # İlk eleman
print(seri[1:3], "\n") # 1. ve 2. elemanlar
# Dilimleme
print(seri[:3], "\n") # İlk 3 eleman
print(seri[-2:], "\n") # Son 2 eleman
1
1 2
2 3
dtype: int32
0 1
1 2
2 3
dtype: int32
3 4
4 5
dtype: int32
- Pandas serileri, çeşitli özelliklere ve metodlara sahiptir.
# Serinin boyutu
print(seri.size, "\n")
# Serinin indeksleri
print(seri.index, "\n")
# Serinin değerleri
print(seri.values, "\n")
# Serinin istatistiksel özetleri
print(seri.describe(), "\n")
5
RangeIndex(start=0, stop=5, step=1)
[1 2 3 4 5]
count 5.000000
mean 3.000000
std 1.581139
min 1.000000
25% 2.000000
50% 3.000000
75% 4.000000
max 5.000000
dtype: float64
- DataFrame, Pandas kütüphanesindeki temel veri yapısıdır ve tablo benzeri bir iki boyutlu veri yapısını temsil eder. Veriler, farklı veri tipleri içerebilen sütunlar halinde düzenlenmiştir. DataFrame, verileri etiketli bir şekilde saklamak, işlemek ve analiz etmek için kullanılır. Pandas, Python'da veri analizi ve manipülasyonu için oldukça popüler bir kütüphanedir ve DataFrame, Pandas'ın bu popülerliğinde önemli bir rol oynamaktadır.
DataFrame'in temel özellikleri şunlardır:
-
İki Boyutlu Yapı: DataFrame, satırlar ve sütunlar şeklinde iki boyutlu bir yapıya sahiptir. Satırlar genellikle gözlemleri (örnekleri) temsil ederken, sütunlar değişkenleri (özellikleri) temsil eder.
-
İndeksleme: DataFrame'in satırları, indeks adı verilen bir etiketle belirlenir. Bu indeks, her bir gözlemin benzersiz bir tanımlayıcısını sağlar.
-
Farklı Veri Tipleri: Her bir sütun farklı veri tiplerini içerebilir. Örneğin, bir sütun sayısal değerleri içerebilirken, diğer bir sütun metinsel değerleri içerebilir.
-
Esnek Boyutlar: DataFrame'ler, değişken sayısını ve gözlem sayısını dinamik olarak yönetebilir. Yani, DataFrame boyutları veri ekledikçe veya çıkardıkça otomatik olarak genişleyebilir veya küçülebilir.
-
Veri Manipülasyonu: Pandas DataFrame, veri analizi, filtreleme, gruplama, birleştirme ve dönüşüm gibi çeşitli işlemleri kolayca gerçekleştirmenizi sağlayan geniş bir metod koleksiyonuna sahiptir.
- Pandas veri çerçeveleri, farklı veri kaynaklarından oluşturulabilir.
import pandas as pd
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [28, 25, 32, 35]}
df = pd.DataFrame(data)
print(df)
Name Age
0 John 28
1 Anna 25
2 Peter 32
3 Linda 35
import pandas as pd
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)
A B C
0 1 2 3
1 4 5 6
2 7 8 9
- Veri çerçeveleri, satırları ve sütunları indekslemek ve dilimlemek için kullanılabilir.
import pandas as pd
# Örnek bir veri listesi
data = {'Name': ['Ahmet', 'Ayşe', 'Mehmet', 'Fatma', 'Ali']}
# DataFrame oluşturma
df = pd.DataFrame(data)
# DataFrame'i görüntüleme
print(df, "\n")
# Sütun seçme
print(df['Name'], "\n")
# Satır seçme
print(df.loc[0], "\n")
# Belirli bir hücreye erişme
print(df.at[0, 'Name'], "\n")
# Dilimleme
print(df.iloc[1:3, :])
Name
0 Ahmet
1 Ayşe
2 Mehmet
3 Fatma
4 Ali
0 Ahmet
1 Ayşe
2 Mehmet
3 Fatma
4 Ali
Name: Name, dtype: object
Name Ahmet
Name: 0, dtype: object
Ahmet
Name
1 Ayşe
2 Mehmet
- Pandas veri çerçeveleri, çeşitli özelliklere ve metodlara sahiptir.
# Veri çerçevesinin boyutu
print(df.shape, "\n")
# Veri çerçevesinin indeksleri
print(df.index, "\n")
# Veri çerçevesinin sütunları
print(df.columns, "\n")
# İlk n satırı görüntüleme
print(df.head(), "\n")
# Son n satırı görüntüleme
print(df.tail())
(5, 1)
RangeIndex(start=0, stop=5, step=1)
Index(['Name'], dtype='object')
Name
0 Ahmet
1 Ayşe
2 Mehmet
3 Fatma
4 Ali
Name
0 Ahmet
1 Ayşe
2 Mehmet
3 Fatma
4 Ali
# Sözlük üzerinden bir Veri Çerçevesi oluşturma
data = {'Name': ['Ali', 'Veli', 'Ayşe', 'Fatma'],
'Age': [25, 30, 35, 40],
'City': ['İstanbul', 'Ankara', 'İzmir', 'Bursa']}
df = pd.DataFrame(data)
print(df)
Name Age City
0 Ali 25 İstanbul
1 Veli 30 Ankara
2 Ayşe 35 İzmir
3 Fatma 40 Bursa
Pandas, çeşitli dosya formatlarından veri yüklemek için kullanılabilir. En yaygın kullanılanlar arasında CSV, Excel, SQL ve JSON bulunur.
- CSV (Comma Separated Values - Virgülle Ayrılmış Değerler) dosyaları, tablo biçimindeki verileri depolamak için yaygın olarak kullanılır. Pandas,
read_csv()
fonksiyonuyla CSV dosyalarını okuyabilir.
# CSV dosyasından veri okuma
df = pd.read_csv('veri.csv')
print(df)
Burada veri.csv
dosyası, mevcut çalışma dizininizde bulunmalıdır.
- Excel dosyaları, sıkça kullanılan bir veri depolama formatıdır. Pandas,
read_excel()
fonksiyonuyla Excel dosyalarını okuyabilir.
# Excel dosyasından veri okuma
df = pd.read_excel('veri.xlsx', sheet_name='Sheet1')
print(df)
Bu komut, 'veri.xlsx' Excel dosyasındaki 'Sheet1' sayfasındaki veriyi okur.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx')
- Pandas, veri çerçevesini CSV ve Excel formatlarında kaydetmek için
to_csv()
veto_excel()
metodlarını sağlar.
import pandas as pd
# Veri çerçevesini CSV olarak kaydetme
df.to_csv('veri_yeni.csv', index=False)
# Veri çerçevesini Excel olarak kaydetme
df.to_excel('veri_yeni.xlsx', index=False)
Şimdi gerçek bir veri seti üzerinde işlemleri yapalım
Veri kontrolü, veri kümesinin yapısını anlamak için önemlidir. Başlangıçta veya sonunda bulunan veri örneklerini görüntülemek için head()
ve tail()
fonksiyonları kullanılır.
# İlk 5 gözlemi görüntüleme
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
2 | ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
3 | ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
4 | AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
# Son 5 satırı gösterme
df.tail()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
504 | YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
505 | YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
506 | ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
507 | ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
508 | ZRGYO | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 |
shape
modülünü kullanarak satır ve sütun sayısı bilgisini elde ederiz.
df.shape
(509, 8)
Bu metot, veri setinin hakkında bilgileri döndürmektedir. Bu bilgilere erişim için
info()
adını kullanabilirsiniz.
Bu fonksiyon, veri çerçevesindeki her sütunun veri tipini, veri tiplerinin sayısal dağılımını, bellek kullanımını, eksik değerleri ve sütunların ve satırların toplamda kaç olduğu bilgisini gösterir.
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 509 entries, 0 to 508
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Kod 509 non-null object
1 Hisse Adı 509 non-null object
2 Sektör 509 non-null object
3 Kapanış(TL) 509 non-null float64
4 Piyasa Değeri(mn TL) 509 non-null float64
5 Piyasa Değeri(mn $) 509 non-null float64
6 Halka AçıklıkOranı (%) 509 non-null float64
7 Sermaye(mn TL) 509 non-null float64
dtypes: float64(5), object(3)
memory usage: 31.9+ KB
Bu bölümde, pandas kitaplığında bulunan pd.set_option()
işlevinin nasıl kullanılacağı gösterilecektir.
- df.head() veya df.tail() ile çalıştırdığımızda sütunların eğer sütun sayısı fazla olsaydı sadece bir kısmını görebilirdik. Veri çerçevesindeki sütunların tamamını görmek isteseydik pd.set_option() ile aşağıdaki ayarı yapabilirdik.
pd.set_option('display.max_columns', None)
None kullanılmasının amacı, display.max_columns seçeneğini sınırlamadan kaldırmaktır.
pd.set_option('display.max_columns', 10)
- bu kodla sütun sayısını 10 ile sınırlandırırdık.
Aynı şekilde, satır sayısını da aşağıdaki gibi ayarlayabiliriz.
pd.set_option('display.max_rows', None)
Pandas veri çerçeveleri, farklı sütunlardaki verilere erişmek için çeşitli yöntemler sağlar.
Son oluşturduğumuz veri çerçevesinden Sektör sütununa erişmek istediğimizi varsayalım.
df["Sektör"]
0 Aracı Kurumlar
1 Kimyasal Ürün
2 Kırtasiye
3 Perakande - Ticaret
4 Meşrubat / İçecek
...
504 İnşaat- Taahhüt
505 Gıda
506 Elektrik
507 Elektrik
508 GYO
Name: Sektör, Length: 509, dtype: object
- Aynı sütuna ulaşmanın bir başka yolu ise nokta notasyonunu kullanmaktır.
df.Sektör
0 Aracı Kurumlar
1 Kimyasal Ürün
2 Kırtasiye
3 Perakande - Ticaret
4 Meşrubat / İçecek
...
504 İnşaat- Taahhüt
505 Gıda
506 Elektrik
507 Elektrik
508 GYO
Name: Sektör, Length: 509, dtype: object
Hangi yöntemi tercih etmeliyiz?
-
pd_df['Sektör'] ifadesi, DataFrame üzerindeki sütuna doğrudan bir dizi indeksi kullanarak erişim sağlar. Bu yöntem, sütun ismi boşluk veya özel karakterler içerdiğinde veya Python programlama dilinde özel bir kelimeyle çakıştığında daha güvenlidir. Örneğin, eğer sütun ismi sutun ismi veya if gibi bir kelime ise bu ifadeleri kullanarak doğrudan sütuna erişim sağlayabiliriz.
-
pd_df.Sektör ifadesi ise, nokta notasyonunu kullanarak sütuna erişim sağlar. Bu ifade daha kısa ve daha okunabilir bir yazım şekli sunar. Ancak bazı durumlarda, sütun ismi boşluk veya özel karakterler içeriyorsa veya Python programlama dilinde özel bir kelimeyle çakışıyorsa hata verebilir.
Daha önce oluşturduğumuz veri çerçevesine sütunlar ekleyip az önce öğrendiklerimizi pekiştirelim.
Buraya kadar tek bir sütuna erişimi gördük. Birden fazla sütuna erişmek istediğimizde aşağıdaki ifadeyi kullanıyoruz.
df[["Kod", "Hisse Adı"]]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | |
---|---|---|
0 | A1CAP | A1 Capital |
1 | ACSEL | Acıselsan Acıpayam Selüloz |
2 | ADEL | Adel Kalemcilik |
3 | ADESE | Adese AVM |
4 | AEFES | Anadolu Efes |
... | ... | ... |
504 | YYAPI | Yesil Yapi |
505 | YYLGD | Yayla Agro Gıda |
506 | ZEDUR | Zedur Enerji |
507 | ZOREN | Zorlu Enerji |
508 | ZRGYO | Ziraat GYO |
509 rows × 2 columns
Yukarıdaki iki duruma dikkat edelim. Birincisi, tek sütuna tek köşeli parantez ([]) ile ulaşırken çoklu sütunlara çift köşeli parantez ([[]]) ile ulaştık. İkincisi, tek sütuna erişirken çıktıyı bir seri olarak alıyorduk ancak çoklu sütunlara erişmek istediğimizde artık bir seri değil bir veri çerçevesi olarak çıktıyı alıyoruz.
Son olarak, sütun isimlerinin tamamını görmek istiyorsak aşağıdaki ifadeyi kullanabiliriz.
df.columns
Index(['Kod', 'Hisse Adı', 'Sektör', 'Kapanış(TL)', 'Piyasa Değeri(mn TL)',
'Piyasa Değeri(mn $)', 'Halka AçıklıkOranı (%)', 'Sermaye(mn TL)'],
dtype='object')
- iloc, integer location anlamına gelir ve DataFrame veya Series üzerinde konum tabanlı indeksleme yapmamıza olanak tanır. İndeksler sıfırdan başlar ve satır veya sütunları belirlemek için tamsayı indekslerini kullanır. iloc kullanırken satır veya sütunların konumunu belirtmek için köşeli parantez içinde tamsayı indeksleri kullanırız.
İlk satıra erişelim
df.iloc[0]
Kod A1CAP
Hisse Adı A1 Capital
Sektör Aracı Kurumlar
Kapanış(TL) 26.8
Piyasa Değeri(mn TL) 3618.0
Piyasa Değeri(mn $) 138.7
Halka AçıklıkOranı (%) 25.9
Sermaye(mn TL) 135.0
Name: 0, dtype: object
Tek bir satıra erişebileceğimiz gibi birden fazla satıra da erişebiliriz. Tıpkı çoklu sütuna erişimde olduğu gibi ilerleyeceğiz.
df.iloc[[0,1]]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
iloc
ile sütunlara da erişebiliriz. Örneğin, ilk iki satırın 5. sütununa erişmeye çalışalım.
df.iloc[[0,1],4]
0 3618.0
1 903.3
Name: Piyasa Değeri(mn TL), dtype: float64
Çoklu sütunlara da erişebiliriz. Örneğin, 4. ve 5. sütunlara erişelim.
df.iloc[[0,1], [3,4]]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kapanış(TL) | Piyasa Değeri(mn TL) | |
---|---|---|
0 | 26.80 | 3618.0 |
1 | 84.25 | 903.3 |
loc
, label location anlamına gelir ve DataFrame veya Series üzerinde etiket tabanlı indeksleme yapmak için kullanılan bir indeksleme yöntemidir.
İlk satıra erişelim. Burada 0 etiketine sahip satırı getireceğiz.
df.loc[0]
Kod A1CAP
Hisse Adı A1 Capital
Sektör Aracı Kurumlar
Kapanış(TL) 26.8
Piyasa Değeri(mn TL) 3618.0
Piyasa Değeri(mn $) 138.7
Halka AçıklıkOranı (%) 25.9
Sermaye(mn TL) 135.0
Name: 0, dtype: object
Tek bir satıra erişebileceğimiz gibi birden fazla satıra da erişebiliriz. Bu defa örnek olarak 0 ve 1 etiketlerine sahip satırları getireceğiz.
df.loc[[0,1]]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
Buraya kadar yaptıklarımız aslında iloc'ta yaptıklarımıza benziyor ancak biz etiket bazlı ilerliyoruz. Son olarak, son sütuna erişelim.
df.loc[[0,1], 'Sermaye(mn TL)']
0 135.0
1 10.7
Name: Sermaye(mn TL), dtype: float64
Çoklu sütunlara da erişebiliriz. Örneğin, aşağıdaki iki sütuna erişelim.
df.loc[[0,1], ['Piyasa Değeri(mn TL)','Piyasa Değeri(mn $)']]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | |
---|---|---|
0 | 3618.0 | 138.7 |
1 | 903.3 | 34.6 |
Pandas veri çerçeveleri üzerinde, satır ve sütunlara aynı anda erişmek için "İki Nokta Kullanımı" yani "indexing" adı verilen bir yöntem bulunmaktadır. Bu yöntem, hem satırları hem de sütunları indeksleyerek belirli bir aralığa erişmeyi sağlar.
":" kullanarak da ilk 5 satıra erişebiliriz. Burada dikkat etmemiz gereken nokta çift parantez yerine tek parantez kullanacak olmamızdır
df.iloc[0:4, 0] # ilk sütundaki 4. indexe kadar olan değerleri yazdırma (4. index dahil değil)
0 A1CAP
1 ACSEL
2 ADEL
3 ADESE
Name: Kod, dtype: object
df.loc[0:4, "Kod"] # ilk sütundaki ilk 5 indexi yazdırma
0 A1CAP
1 ACSEL
2 ADEL
3 ADESE
4 AEFES
Name: Kod, dtype: object
"Hisse Adı" ve "Piyasa Değeri(mn TL)" sütunlarının verilerini almak için aşağıdaki kod parçasını kullanırız.
df[["Hisse Adı", "Piyasa Değeri(mn TL)"]]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Piyasa Değeri(mn TL) | |
---|---|---|
0 | A1 Capital | 3618.0 |
1 | Acıselsan Acıpayam Selüloz | 903.3 |
2 | Adel Kalemcilik | 5788.1 |
3 | Adese AVM | 1633.0 |
4 | Anadolu Efes | 41950.7 |
... | ... | ... |
504 | Yesil Yapi | 875.0 |
505 | Yayla Agro Gıda | 14801.8 |
506 | Zedur Enerji | 1245.0 |
507 | Zorlu Enerji | 17500.0 |
508 | Ziraat GYO | 21919.2 |
509 rows × 2 columns
"loc" ve "iloc" kullanarak aşağıdaki şekilde satır ve sütun aralığı verebiliriz.
df.loc[0:4, "Hisse Adı":"Kapanış(TL)"]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | |
---|---|---|---|
0 | A1 Capital | Aracı Kurumlar | 26.80 |
1 | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 |
2 | Adel Kalemcilik | Kırtasiye | 245.00 |
3 | Adese AVM | Perakande - Ticaret | 1.62 |
4 | Anadolu Efes | Meşrubat / İçecek | 70.85 |
df.iloc[0:4, 0:4]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | |
---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 |
2 | ADEL | Adel Kalemcilik | Kırtasiye | 245.00 |
3 | ADESE | Adese AVM | Perakande - Ticaret | 1.62 |
"Kapanış(TL)" sütunundaki değeri 100 den büyük olan verilerin "Kod" sütunundaki karşılığını ekrana yazdıralım.
df[df["Kapanış(TL)"] > 100]["Kod"]
2 ADEL
7 AGHOL
24 ALCAR
26 ALFAS
36 ARCLK
...
479 UZERB
486 VERUS
492 YAPRK
495 YBTAS
503 YUNSA
Name: Kod, Length: 73, dtype: object
df[(df["Kapanış(TL)"] > 100) & (df["Piyasa Değeri(mn TL)"] > 3000)]["Kod"]
2 ADEL
7 AGHOL
24 ALCAR
26 ALFAS
36 ARCLK
39 ARMDA
44 ASUZU
51 AVHOL
54 AYCES
70 BFREN
73 BIMAS
89 BRSAN
90 BRYAT
99 CCOLA
104 CIMSA
105 CLEBI
113 CVKMD
114 CWENE
132 DOAS
134 DOCO
142 ECZYT
145 EGEEN
148 EGPRO
161 ERCB
183 FROTO
207 GUBRF
237 INVES
256 JANTS
265 KCHOL
266 KENT
278 KMPUR
281 KONTR
282 KONYA
326 MGROS
327 MIATK
335 MRSHL
340 NATEN
346 NUHCM
355 OTKAR
366 PAMEL
377 PGSUS
380 PKENT
385 POLTK
393 QNBFL
413 SDTTR
435 SRVGY
440 TAVHL
449 THYAO
456 TOASO
464 TTRAK
475 ULUSE
486 VERUS
495 YBTAS
503 YUNSA
Name: Kod, dtype: object
- "Kapanış(TL)" değeri 100 den büyük ve "Piyasa Değeri(mn TL)" 30000 de büyük olan verilerin "Kod" sütunundaki karşılıkları.
df[(df["Kapanış(TL)"] > 100) & (df["Piyasa Değeri(mn TL)"] > 30000)]["Kod"]
36 ARCLK
73 BIMAS
89 BRSAN
90 BRYAT
99 CCOLA
132 DOAS
134 DOCO
183 FROTO
207 GUBRF
237 INVES
265 KCHOL
266 KENT
281 KONTR
326 MGROS
377 PGSUS
440 TAVHL
449 THYAO
456 TOASO
464 TTRAK
Name: Kod, dtype: object
Pandas'ın value_counts() yöntemi, bir sütundaki benzersiz değerleri ve her bir değerin kaç kez tekrarlandığını saymak için kullanılır. Bu yöntem, veri setindeki dağılımı anlamak için sıklıkla kullanılır.
- "Sektör" sütununu seçip her bir sektörden kaç adet bulunduğunu hesaplayalım.
df["Sektör"].value_counts()
Sektör
GYO 41
Elektrik 36
Gıda 33
Holdingler 32
Tekstil Entegre 25
Teknoloji 17
Turizm 16
İnşaat Malzemeleri 16
Kimyasal Ürün 16
Yatırım Ortaklıkları 16
Çimento 15
Bankacılık 15
Kağıt Ürünleri 14
Perakande - Ticaret 13
Sağlık ve İlaç 12
Demir-Çelik Temel 12
Aracı Kurumlar 11
Otomotiv Parçası 10
Dayanıklı Tüketim 10
Fin.Kiralama ve Faktoring 9
Meşrubat / İçecek 9
Medya 8
Demir-Çelik Döküm 8
Otomotiv 8
Elektrik Makinları Üretimi 7
Bilgisayar Toptancılığı 7
Ulaştırma-Lojistik 7
İnşaat- Taahhüt 6
Mobilya 6
Madencilik 6
Sigorta 6
Petrol 6
Diğer 5
Boya 5
Havayolları ve Hizm. 4
Seramik 4
Deri Giyim 4
İletişim 4
Spor 4
Tarım Kimyasalları 4
Endüstriyel Tekstil 4
İletişim Cihazları 3
Pazarlama 3
Kırtasiye 2
Otomotiv Lastiği 2
Hayvancılık 2
Savunma 2
Kablo 2
Eğlence Hizmetleri 1
Cam 1
Name: count, dtype: int64
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx')
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
2 | ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
3 | ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
4 | AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
Sol tarafta bir sütunmuş gibi görünen 0, 1, 2, ... değerleri indekstir. İndeksler, bir numaralandırma veya etiketleme mekanizmasıdır. Örneğin, bir liste içindeki elemanların her biri bir indeks değerine sahiptir ve bu indeksler kullanılarak elemanlara erişebiliriz. Örneğimizdeki veri çerçevesinde indeks, satırları etiketlemek veya numaralandırmak için kullanılır. Varsayılan olarak, veri çerçevesinin indeksi sıfırdan başlayan tam sayılarla oluşturulur. Bununla birlikte, indeksler benzersiz olmak zorunda değildir. Yani aynı indeks değeri birden fazla satıra karşılık gelebilir.
Pandas'ta, veri çerçevesindeki belirli bir sütunu indeks olarak ayarlamak için set_index()
yöntemi kullanılır. Ayrıca, veri çerçevesini okurken, okunan sütunu indeks olarak belirlemek için index_col
parametresi kullanılır.
set_index()
yöntemi, belirtilen sütunu indeks olarak ayarlar. Bu, veri çerçevesindeki satırları bu sütuna göre etiketler. inplace
parametresini "True" olarak ayarlarsak asıl veri seti üzerinde değişiklik yapabiliriz.
- "df2" adlı yeni bir değişken oluşturarak "Kod" sütununu index olarak ayarlayalım.
df2 = df.set_index("Kod")
df2.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
index_col
parametresi, veri çerçevesini okurken belirli bir sütunu indeks olarak belirlemek için kullanılır.
import pandas as pd
df3 = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
df3.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
df3.index
Index(['A1CAP', 'ACSEL', 'ADEL', 'ADESE', 'AEFES', 'AFYON', 'AGESA', 'AGHOL',
'AGYO', 'AHGAZ',
...
'YGYO', 'YKBNK', 'YKSLN', 'YONGA', 'YUNSA', 'YYAPI', 'YYLGD', 'ZEDUR',
'ZOREN', 'ZRGYO'],
dtype='object', name='Kod', length=509)
Pandas'ta, veri çerçevesindeki satırlara ve sütunlara indeksler aracılığıyla erişmek için loc
yöntemi kullanılır. loc
, indeks etiketlerini kullanarak belirli bir satır veya sütunun değerlerine erişmemizi sağlar.
loc
ile "THYAO" indeksine ulaşalım. Aslında burada iloc ile loc'un ayrımı daha net görmüş olacağız.
df3.loc["THYAO"]
Hisse Adı Türk Hava Yolları
Sektör Havayolları ve Hizm.
Kapanış(TL) 216.6
Piyasa Değeri(mn TL) 298908.0
Piyasa Değeri(mn $) 11455.9
Halka AçıklıkOranı (%) 50.4
Sermaye(mn TL) 1380.0
Name: THYAO, dtype: object
- Aynı indexin "Piyasa Değeri(mn TL)" değerine bakalım.
df3.loc["THYAO", "Piyasa Değeri(mn TL)"]
298908.0
Pandas'ta, reset_index()
yöntemi veri çerçevesinin indeksini sıfırlamak için kullanılır. Bu işlem, mevcut indeksi sıfırlar ve bir dizi ardışık sayıyı yeni indeks olarak atar.
- İndexi "kod" sütunu olarak ayarlamıştık. Varsayılan index değerine geri döndürelim.
df3.reset_index(inplace=True)
df3.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
2 | ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
3 | ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
4 | AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
Pandas'ta, veri çerçevesindeki indekslerin sıralanması için sort_index() yöntemi kullanılır. Bu yöntem, indekslerin sıralanmasını belirli bir sıra veya kriter doğrultusunda gerçekleştirir.
Artan sıraya göre aşağıdaki gibi sıralayabiliriz. Azalan sıraya göre sıralamak için ascending
parametresini "False" olarak belirtmeliyiz.
df.sort_index().head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
0 | A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
1 | ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
2 | ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
3 | ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
4 | AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
df.sort_index(ascending=False).head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
508 | ZRGYO | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 |
507 | ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
506 | ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
505 | YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
504 | YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
df.reset_index(inplace=True)
Pandas'ta, veri çerçevesinden belirli bir koşula veya kriterlere uyan verileri seçme işlemine "filtreleme" denir. Bu işlem, veri setinden istenmeyen verileri kaldırmak veya belirli bir şartı sağlayan verileri seçmek için kullanılır.
Pandas'ta, tekli filtreme yapmak için genellikle iç içe geçmiş koşullar veya loc kullanılır. Bu yöntemlerle, birden fazla koşulu tek bir ifadeyle birleştirebiliriz.
- "Sektör" sütununun "Bankacılık" olduğu değerleri filtreleyelim.
df[df["Sektör"] == "Bankacılık"].head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
index | Kod | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|---|
10 | 10 | AKBNK | Akbank | Bankacılık | 20.46 | 106392.0 | 4077.6 | 51.8 | 5200.0 |
23 | 23 | ALBRK | Albaraka Türk | Bankacılık | 3.10 | 7750.0 | 297.0 | 38.4 | 2500.0 |
184 | 184 | GARAN | Garanti Bankası | Bankacılık | 33.10 | 139020.0 | 5328.0 | 14.0 | 4200.0 |
210 | 210 | HALKB | Halkbank | Bankacılık | 13.08 | 93976.9 | 3601.7 | 8.5 | 7184.8 |
221 | 221 | ICBCT | ICBC Turkey Bank | Bankacılık | 8.56 | 7361.6 | 282.1 | 7.2 | 860.0 |
- "Sektör" değeri "Bankacılık" olan verilerin "Kod" sütunundaki değerlerini yazdıralım.
df[df["Sektör"] == "Bankacılık"]["Kod"].head()
10 AKBNK
23 ALBRK
184 GARAN
210 HALKB
221 ICBCT
Name: Kod, dtype: object
df.set_index("Kod", inplace=True)
loc
yöntemiyle de tekli filtreme yapabiliriz. "Sektör" değeri "Bankacılık olan verilerin "Halka AçıklıkOranı (%)" değerlerini yazdıralım.
df.loc[df["Sektör"] == "Bankacılık", "Halka AçıklıkOranı (%)"]
Kod
AKBNK 51.8
ALBRK 38.4
GARAN 14.0
HALKB 8.5
ICBCT 7.2
ISATR 23.9
ISBTR 25.7
ISCTR 32.6
ISKUR 28.7
KLNMA 0.9
QNBFB 0.1
SKBNK 48.8
TSKB 38.8
VAKBN 6.1
YKBNK 32.0
Name: Halka AçıklıkOranı (%), dtype: float64
Pandas'ta, çoklu filtreme işlemleri için &
(ve), |
(veya) operatörleri ve isin()
yöntemi kullanılır. Bu yöntemlerle birden fazla koşulu birleştirebiliriz ve istenilen verileri seçebiliriz.
Birden fazla filtreleme yapmak istediğimizde mantıksal operatörleri kullanabiliriz.
- Örneğin, hem Sektör sütunundan Bankacılık değerini hem de Halka AçıklıkOranı (%) sütunundan 10'den büyük olanları alalım ve Hisse Adı sütunundaki değerleri getirelim.
df.loc[(df["Sektör"] == "Bankacılık") & (df["Halka AçıklıkOranı (%)"] > 10), "Hisse Adı"]
Kod
AKBNK Akbank
ALBRK Albaraka Türk
GARAN Garanti Bankası
ISATR İş Bankası (A)
ISBTR İş Bankası (B)
ISCTR İş Bankası (C)
ISKUR İş Bankası Kurucu
SKBNK Şekerbank
TSKB TSKB
YKBNK Yapı Kredi Bankası
Name: Hisse Adı, dtype: object
- Burada, her bir filtreleme işlemini parantez içerisine aldık. Örnekte, ve anlamına gelen & operatörünü kullandık. Bir de veya anlamına gelen | operatörünü kullanalım.
df.loc[(df['Sektör'] == 'Bankacılık') | (df['Halka AçıklıkOranı (%)'] > 50), 'Hisse Adı']
Kod
ACSEL Acıselsan Acıpayam Selüloz
ADESE Adese AVM
AKBNK Akbank
AKSUE Aksu Enerji
AKYHO Akdeniz Yatırım Holding
...
YESIL Yeşil Yatırım Holding
YGGYO Yeni Gimat GYO
YGYO Yeşil GYO
YKBNK Yapı Kredi Bankası
YYAPI Yesil Yapi
Name: Hisse Adı, Length: 165, dtype: object
&
kullandığımız örnekte elde ettiğimiz verinin tam tersini elde etmek için başına~
işareti koyalım. Elde edeceğimiz çıktı "Sektör" değeri "Bankacılık" olmayan ve "Halka AçıklıkOranı (%)" değeri 10 dan küçük olan veriler olacaktır.
df.loc[~(df['Sektör'] == 'Bankacılık') & ~(df['Halka AçıklıkOranı (%)'] > 10), 'Hisse Adı']
Kod
AKMGY Akmerkez GYO
ARMDA Armada Bilgisayar
AYCES Altınyunus Çesme
BANVT Banvit
BASCM Baştaş Başkent Çimento Sanayi
CLEBI Çelebi
CMENT Çimentaş
DAPGM Dap Gayrimenkul
DGGYO Dogus GE GYO
DOKTA Döktaş Dökümcülük
ENKAI Enka İnşaat
GARFA Garanti BBVA Faktoring
ISDMR İskenderun Demir Çelik
KENT Kent Gıda
MRSHL Marshall
QNBFL QNB Finans Fin. Kir.
RAYSG Ray Sigorta
SNPAM Sönmez Pamuklu
SONME Sönmez Filament
TBORG Tuborg
UFUK Ufuk Yat.Yön.ve Gay. AŞ.
ULUSE Ulusoy Elektrik
YBTAS Yibitaş İnş. Malzemeleri
Name: Hisse Adı, dtype: object
isin()
yöntemi, bir sütunun belirli değerlere sahip olup olmadığını kontrol eder.
df_sektor = df.loc[df["Sektör"].isin(['GYO','Bankacılık'])]
df_sektor.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
index | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
AGYO | 8 | Atakule GYO | GYO | 5.41 | 1424.7 | 54.6 | 18.3 | 263.3 |
AKBNK | 10 | Akbank | Bankacılık | 20.46 | 106392.0 | 4077.6 | 51.8 | 5200.0 |
AKFGY | 13 | Akfen GYO | GYO | 4.65 | 6045.0 | 231.7 | 44.5 | 1300.0 |
AKMGY | 16 | Akmerkez GYO | GYO | 83.40 | 3107.8 | 119.1 | 8.9 | 37.3 |
AKSGY | 19 | Akis GYO | GYO | 6.21 | 4999.1 | 191.6 | 44.7 | 805.0 |
Pandas'ta, bir sütunun içinde belirli bir string'i içeren değerleri seçmek için str.contains()
yöntemi kullanılır. Bu yöntem, veri çerçevesindeki string değerler arasında arama yapmayı sağlar.
-
Hisse Adı sütununda sadece Enerji içerenleri filtreleyelim. Bunun için bir string'i içerip içermediği kontrolü yapmış olacağız.
-
İhtiyacımız olmamasına rağmen na parametresini False olacak şekilde ekledik. İlgili sütunda NA / NaN içerdiğini varsayalım. Bu durumda kodu çalıştırdığımızda ValueError: Cannot mask with non-boolean array containing NA / NaN values hatası alırdık. na=False olarak ayarlandığında, contains() fonksiyonu eksik değerleri içeren satırları dikkate almadan sadece Enerji kelimesini içeren satırları filtrelemek için kullanılır. Yani, Hisse Adı sütununda Enerji kelimesini içeren satırları seçerken eksik değerleri göz ardı eder.
df_filtre_enerji = df[df["Hisse Adı"].str.contains("Enerji", na=False)]
df_filtre_enerji.head(10)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
index | Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
AKFYE | 14 | Akfen Yenilenebilir Enerji | Elektrik | 11.99 | 12182.2 | 466.9 | 30.7 | 1016.0 |
AKSEN | 18 | Aksa Enerji | Elektrik | 34.86 | 42750.2 | 1638.4 | 20.6 | 1226.3 |
AKSUE | 20 | Aksu Enerji | Elektrik | 51.95 | 1714.4 | 65.7 | 81.0 | 33.0 |
ALMAD | 30 | Altınyağ Madencilik ve Enerji | Madencilik | 5.69 | 1564.8 | 60.0 | 65.3 | 275.0 |
ARASE | 35 | Doğu Aras Enerji | Elektrik | 51.20 | 12800.0 | 490.6 | 17.5 | 250.0 |
ASTOR | 43 | Astor Enerji | Elektrik Makinları Üretimi | 77.85 | 77694.3 | 2977.7 | 20.7 | 998.0 |
AYDEM | 55 | Aydem Enerji | Elektrik | 16.14 | 11378.7 | 436.1 | 15.7 | 705.0 |
AYEN | 56 | Ayen Enerji | Elektrik | 34.00 | 9435.0 | 361.6 | 16.9 | 277.5 |
BIOEN | 74 | Biotrend Enerji | Elektrik | 15.40 | 7700.0 | 295.1 | 37.8 | 500.0 |
CONSE | 108 | Consus Enerji | Elektrik | 6.93 | 2671.5 | 102.4 | 32.0 | 385.5 |
Sadece ilgilendiğimiz Hisse Adı sütununu alalım.
df_filtre_enerji = df.loc[df["Hisse Adı"].str.contains("Enerji", na=False), "Hisse Adı"]
df_filtre_enerji
Kod
AKFYE Akfen Yenilenebilir Enerji
AKSEN Aksa Enerji
AKSUE Aksu Enerji
ALMAD Altınyağ Madencilik ve Enerji
ARASE Doğu Aras Enerji
ASTOR Astor Enerji
AYDEM Aydem Enerji
AYEN Ayen Enerji
BIOEN Biotrend Enerji
CONSE Consus Enerji
CWENE Cw Enerji
ENJSA Enerjisa Enerji
EUPWR Europower Enerji
GWIND Galata Wind Enerji
HUNER Hun Enerji
IEYHO Işıklar Enerji ve Yapı Holding
IPEKE İpek Enerji
KARYE Kartal Yenilenebili Enerji
MAGEN Margün Enerji
MANAS Manas Enerji Yönetimi
NATEN Naturel Yenilenebilir Enerji
ORGE ORGE Enerji Elektrik
SAYAS Say Yenilenebilir Enerji
SMRTG Smart Güneş Enerjisi
YAYLA Yayla Enerji Uretim Turizm
ZEDUR Zedur Enerji
ZOREN Zorlu Enerji
Name: Hisse Adı, dtype: object
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
columns
özelliği, mevcut sütun isimlerini güncellemek için kullanılır.
df.columns = [
'HisseAdi',
'Sektor',
'KapanisTL',
'PiyasaDegeriMnTL',
'PiyasaDegeriMnUSD',
'HalkaAciklikOraniYuzde',
'SermayeMnTL'
]
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
HisseAdi | Sektor | KapanisTL | PiyasaDegeriMnTL | PiyasaDegeriMnUSD | HalkaAciklikOraniYuzde | SermayeMnTL | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
List comprehension kullanarak sütun isimlerini güncellemek de mümkündür.
- Aşağıdaki kod, bir Pandas DataFrame'in sütun isimlerini büyük harflere dönüştürmek için kullanılan bir dizi ifadedir. Kod, list comprehension yöntemini kullanarak, DataFrame'in sütunlarını tek tek dolaşarak her bir sütunun ismini büyük harflere dönüştürür ve bu dönüşüm sonucunda oluşan yeni sütun isimlerini DataFrame'in sütunlarına atar.
df.columns = [sutun.upper() for sutun in df.columns]
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
HISSEADI | SEKTOR | KAPANISTL | PIYASADEGERIMNTL | PIYASADEGERIMNUSD | HALKAACIKLIKORANIYUZDE | SERMAYEMNTL | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
str.replace()
yöntemi, sütun değerlerini dönüştürmek için kullanılabilir.
- USD içeren sütunları $ ile değiştirelim.
df.columns = df.columns.str.replace("USD", "$")
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
HISSEADI | SEKTOR | KAPANISTL | PIYASADEGERIMNTL | PIYASADEGERIMN$ | HALKAACIKLIKORANIYUZDE | SERMAYEMNTL | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
- Sütun isimlerini list comprehension kullanarak tekrar küçük yapalım.
df.columns = [sutun.lower() for sutun in df.columns]
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
hisseadi | sektor | kapanistl | piyasadegerimntl | piyasadegerimn$ | halkaaciklikoraniyuzde | sermayemntl | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
rename(
) yöntemi, belirli sütunların adlarını yeniden adlandırmak için kullanılır.
df.rename(columns={
'hisseadi':'HisseAdi',
'sektor':'Sektor',
'kapanistl':'KapanisTL',
'piyasadegerimntl':'PiyasaDegeriMnTL',
'piyasadegerimn$':'PiyasaDegeriMnUSD',
'halkaaciklikoraniyuzde':'HalkaAciklikOraniYuzde',
'sermayemntl':'SermayeMnTL'
}, inplace=True)
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
HisseAdi | Sektor | KapanisTL | PiyasaDegeriMnTL | PiyasaDegeriMnUSD | HalkaAciklikOraniYuzde | SermayeMnTL | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
Pandas'ta, veri çerçevesindeki satırları güncellemek için çeşitli yöntemler bulunmaktadır. Bu yöntemlerle, mevcut değerleri değiştirebilir veya yeni değerler ekleyebiliriz.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
loc
yöntemi, belirli satırları ve sütunları indeksleme ve güncelleme için kullanılır.
- A1CAP etiketine sahip satırdaki bilgileri güncelleyelim.
df.loc["A1CAP"] = ['A1 Capital (Test)','Aracı Kurumlar (Test)',26.80,3618.0,138.7,25.9,135]
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital (Test) | Aracı Kurumlar (Test) | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
-
Burada ilgili satırdaki bazı sütunlara denk gelen değerleri güncelledik. Eğer çok daha fazla sütun olsaydı tek tek hepsini yazmak zor olurdu.
-
Bilgisini değiştirdiğimiz Hisse Adı ve Sektör sütunlarına ait değerleri eski haline getirelim.
df.loc["A1CAP", ["HisseAdi", "Sektör"]] = ['A1 Capital','Aracı Kurumlar']
df.head()
C:\Users\Yusuf Altuntaş\AppData\Local\Temp\ipykernel_32428\1369592462.py:1: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value 'A1 Capital' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.
df.loc["A1CAP", ["HisseAdi", "Sektör"]] = ['A1 Capital','Aracı Kurumlar']
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | A1 Capital (Test) | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | NaN |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | NaN |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | NaN |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | NaN |
at
yöntemi, belirli bir hücreyi güncellemek için kullanılır.
df.at['A1CAP', 'Hisse Adı'] = 'A1 Capital Test'
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | A1 Capital Test | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | NaN |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | NaN |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | NaN |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | NaN |
- Bir filtreleme sonrası da tek bir hücre için güncelleme yapılabilir.
df.loc[df["Sektör"] == "Bankacılık", "HalkaAciklikOraniYuzde"] = 0
df.loc[df['Sektör'] == 'Bankacılık', 'HalkaAciklikOraniYuzde']
Kod
AKBNK 0.0
ALBRK 0.0
GARAN 0.0
HALKB 0.0
ICBCT 0.0
ISATR 0.0
ISBTR 0.0
ISCTR 0.0
ISKUR 0.0
KLNMA 0.0
QNBFB 0.0
SKBNK 0.0
TSKB 0.0
VAKBN 0.0
YKBNK 0.0
Name: HalkaAciklikOraniYuzde, dtype: float64
Çoklu satır güncellemesi yapmak istediğimiz zaman birkaç farklı yolu kullanabiliriz.
- Örneğin, Hisse Adı sütunundaki tüm değerleri küçük yapalım. Bunun için str.lower() fonksiyonunu kullanabiliriz.
df["Hisse Adı"] = df["Hisse Adı"].str.lower()
df["Hisse Adı"]
Kod
A1CAP a1 capital test
ACSEL acıselsan acıpayam selüloz
ADEL adel kalemcilik
ADESE adese avm
AEFES anadolu efes
...
YYAPI yesil yapi
YYLGD yayla agro gıda
ZEDUR zedur enerji
ZOREN zorlu enerji
ZRGYO ziraat gyo
Name: Hisse Adı, Length: 509, dtype: object
- İkinci bir yol olan apply() ile Hisse Adı sütunundaki tüm değerleri büyük harfli yapalım. Bunun için önce bir fonksiyon yazıp ardından bu fonksiyonu apply() ile uygulayacağız.
def hisse_adi_guncelle(hisse_Adi):
return hisse_Adi.upper()
df["Hisse Adı"] = df["Hisse Adı"].apply(hisse_adi_guncelle)
df["Hisse Adı"]
Kod
A1CAP A1 CAPITAL TEST
ACSEL ACISELSAN ACIPAYAM SELÜLOZ
ADEL ADEL KALEMCILIK
ADESE ADESE AVM
AEFES ANADOLU EFES
...
YYAPI YESIL YAPI
YYLGD YAYLA AGRO GIDA
ZEDUR ZEDUR ENERJI
ZOREN ZORLU ENERJI
ZRGYO ZIRAAT GYO
Name: Hisse Adı, Length: 509, dtype: object
- Üçüncü bir yol olan apply() ve lambda ile Hisse Adı sütunundaki tüm değerlerin yalnızca ilk harflerini büyük bırakalım.
df['Hisse Adı'] = df['Hisse Adı'].apply(lambda x: x.capitalize())
df["Hisse Adı"]
Kod
A1CAP A1 capital test
ACSEL Aciselsan acipayam selüloz
ADEL Adel kalemcilik
ADESE Adese avm
AEFES Anadolu efes
...
YYAPI Yesil yapi
YYLGD Yayla agro gida
ZEDUR Zedur enerji
ZOREN Zorlu enerji
ZRGYO Ziraat gyo
Name: Hisse Adı, Length: 509, dtype: object
- Dördüncü bir yol olan map() ve lambda ile Hisse Adı ve Sektör sütunlarındaki harfleri küçük yapalım.
df[["Hisse Adı", "Sektör"]] = df[["Hisse Adı", "Sektör"]].map(lambda x:x.lower())
df[["Hisse Adı", "Sektör"]].head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | |
---|---|---|
Kod | ||
A1CAP | a1 capital test | aracı kurumlar |
ACSEL | aciselsan acipayam selüloz | kimyasal ürün |
ADEL | adel kalemcilik | kırtasiye |
ADESE | adese avm | perakande - ticaret |
AEFES | anadolu efes | meşrubat / i̇çecek |
- Beşinci bir yol olan map() veya replace() ile seriler üzerinde güncelleme işlemleri yapabiliriz.
df["Hisse Adı"].map({'a1 capital test':'a1 capital'})
Kod
A1CAP a1 capital
ACSEL NaN
ADEL NaN
ADESE NaN
AEFES NaN
...
YYAPI NaN
YYLGD NaN
ZEDUR NaN
ZOREN NaN
ZRGYO NaN
Name: Hisse Adı, Length: 509, dtype: object
- Ancak map() yönteminde eşleştirme sözlüğünde yer almayan değerler dönüşüm sırasında NaN olarak kabul edilir. Bu noktada replace() fonksiyonunu kullanabiliriz.
df["Hisse Adı"].replace({'a1 capital test':'a1 capital'})
Kod
A1CAP a1 capital
ACSEL aciselsan acipayam selüloz
ADEL adel kalemcilik
ADESE adese avm
AEFES anadolu efes
...
YYAPI yesil yapi
YYLGD yayla agro gida
ZEDUR zedur enerji
ZOREN zorlu enerji
ZRGYO ziraat gyo
Name: Hisse Adı, Length: 509, dtype: object
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
Pandas'ta, veri çerçevesindeki mevcut sütunlardan alınan değerlerin birleştirilerek yeni bir sütun oluşturulması işlemine "sütunların birleştirilmesi" denir. Bu işlem, genellikle farklı sütunlardaki bilgilerin birleştirilerek daha anlamlı veya yeni bir bilgi elde etmek amacıyla yapılır. Pandas'ta bu işlem, mevcut sütunlardaki değerlerin toplanması, birleştirilmesi veya işaretlerle ayrılması gibi yöntemlerle gerçekleştirilebilir
- Sütunların birleştirilmesi işlemi, mevcut sütunlardaki değerlerin belirli bir işaretle veya metinle birleştirilerek yeni bir sütun oluşturulmasıdır. Örneğin, Hisse Adı ve Sektör sütunlarındaki değerlerin "@" işaretiyle birleştirilerek yeni bir HisseAdi@Sektor sütunu oluşturalım.
df["HisseAdi@Sektor"] = df["Hisse Adı"] + "@" + df["Sektör"]
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi@Sektor | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital@Aracı Kurumlar |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | Acıselsan Acıpayam Selüloz@Kimyasal Ürün |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | Adel Kalemcilik@Kırtasiye |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | Adese AVM@Perakande - Ticaret |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | Anadolu Efes@Meşrubat / İçecek |
drop()
yöntemi, belirli sütunları veya satırları kaldırmak için kullanılır.
- Hisse Adı ve Sektör sütunlarına ihtiyacımız olmadığını düşünelim. Bunları drop() yardımıyla kaldırabiliriz. Değişiklikleri de aynı veri çerçevesine inplace parametresini True yapıp kaydedelim.
df.drop(columns=["Hisse Adı", "Sektör"], inplace=True)
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi@Sektor | |
---|---|---|---|---|---|---|
Kod | ||||||
A1CAP | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital@Aracı Kurumlar |
ACSEL | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | Acıselsan Acıpayam Selüloz@Kimyasal Ürün |
ADEL | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | Adel Kalemcilik@Kırtasiye |
ADESE | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | Adese AVM@Perakande - Ticaret |
AEFES | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | Anadolu Efes@Meşrubat / İçecek |
str.split()
yöntemi, bir sütunu belirli bir ayırıcıya göre bölerek yeni sütunlar oluşturmak için kullanılır.
- Kaldırdığımız Hisse Adı ve Sektör sütunlarını tekrar yerine koyalım. Bunun için str.split() fonksiyonunu kullanacağız.
df["HisseAdi@Sektor"].str.split("@")
Kod
A1CAP [A1 Capital, Aracı Kurumlar]
ACSEL [Acıselsan Acıpayam Selüloz, Kimyasal Ürün]
ADEL [Adel Kalemcilik, Kırtasiye]
ADESE [Adese AVM, Perakande - Ticaret]
AEFES [Anadolu Efes, Meşrubat / İçecek]
...
YYAPI [Yesil Yapi, İnşaat- Taahhüt]
YYLGD [Yayla Agro Gıda, Gıda]
ZEDUR [Zedur Enerji, Elektrik]
ZOREN [Zorlu Enerji, Elektrik]
ZRGYO [Ziraat GYO, GYO]
Name: HisseAdi@Sektor, Length: 509, dtype: object
- Sonucu yeni sütunlar olarak genişletelim. Bunu, expand parametresi ile yapacağız.
expand=True
argümanı, bu listeyi DataFrame olarak genişletir, yani her bir bölünmüş değeri ayrı bir sütun olarak ekler.
df["HisseAdi@Sektor"].str.split("@", expand=True)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
0 | 1 | |
---|---|---|
Kod | ||
A1CAP | A1 Capital | Aracı Kurumlar |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün |
ADEL | Adel Kalemcilik | Kırtasiye |
ADESE | Adese AVM | Perakande - Ticaret |
AEFES | Anadolu Efes | Meşrubat / İçecek |
... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt |
YYLGD | Yayla Agro Gıda | Gıda |
ZEDUR | Zedur Enerji | Elektrik |
ZOREN | Zorlu Enerji | Elektrik |
ZRGYO | Ziraat GYO | GYO |
509 rows × 2 columns
- Yeni oluşan sütunları veri çerçevesine ekleyelim.
df[["Hisse Adı", "Sektör"]] = df["HisseAdi@Sektor"].str.split("@", expand=True)
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi@Sektor | Hisse Adı | Sektör | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital@Aracı Kurumlar | A1 Capital | Aracı Kurumlar |
ACSEL | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | Acıselsan Acıpayam Selüloz@Kimyasal Ürün | Acıselsan Acıpayam Selüloz | Kimyasal Ürün |
ADEL | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | Adel Kalemcilik@Kırtasiye | Adel Kalemcilik | Kırtasiye |
ADESE | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | Adese AVM@Perakande - Ticaret | Adese AVM | Perakande - Ticaret |
AEFES | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | Anadolu Efes@Meşrubat / İçecek | Anadolu Efes | Meşrubat / İçecek |
assign()
metodu, yeni sütunlar eklemek için kullanılır. Bu metod, mevcut bir veri çerçevesine yeni sütunlar ekler ve orijinal veri çerçevesini değiştirmez.
import numpy as np
import pandas as pd
# DataFrame'e yeni bir sütun ekleyelim ve sıfırları NaN ile değiştirelim
yenidf = df.assign(SermayeYüzde=df["Sermaye(mn TL)"].apply(lambda x: np.nan if x == 0 else (df["Sermaye(mn TL)"].sum() / x) * 100))
# Yeni DataFrame'i yazdıralım
yenidf
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HalkaAciklikOraniGrup | SermayeYüzde | |
---|---|---|---|---|---|---|---|---|---|
Kod | |||||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | <=50 | 1.759824e+05 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | >50 | 2.220338e+06 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | <=50 | 1.006679e+06 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | >50 | 2.356907e+04 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | <=50 | 4.012434e+04 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 | >50 | 7.385023e+04 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 | <=50 | 5.027004e+04 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 | <=50 | 9.503048e+05 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 | <=50 | 4.751524e+03 |
ZRGYO | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 | <=50 | 5.061705e+03 |
509 rows × 9 columns
join()
metodu, iki veri çerçevesini birleştirmek için kullanılır. Bu metod, sütunlar veya indeksler üzerinde birleştirme yapabilir.
Kullanımı
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
other
: Birleştirilecek diğer veri çerçevesi.on
: Birleştirme sütunu. Varsayılan olarak, indekslere göre birleştirme yapılır.how
: Birleştirme türü. 'left', 'right', 'outer' veya 'inner'. Varsayılan olarak 'left'.lsuffix
versuffix
: İki veri çerçevesinde aynı sütun adları varsa, eklenen soneklerin adlarını belirtmek için kullanılır.sort
: Birleştirme sonucunun sıralanıp sıralanmayacağını belirtir.
Örnek Kullanım
import pandas as pd
# İlk veri çerçevesi
data1 = {'A': [1, 2, 3],
'B': [4, 5, 6]}
df1 = pd.DataFrame(data1)
# İkinci veri çerçevesi
data2 = {'C': [7, 8, 9],
'D': [10, 11, 12]}
df2 = pd.DataFrame(data2)
# Birleştirme işlemi
result = df1.join(df2)
print(result)
merge()
metodu, iki veri çerçevesini birleştirmek için kullanılır. Bu metod, sütunlar veya indeksler üzerinde birleştirme yapabilir.
Kullanımı
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False)
left
veright
: Birleştirilecek veri çerçeveleri.how
: Birleştirme türü. 'left', 'right', 'outer' veya 'inner'. Varsayılan olarak 'inner'.on
: Birleştirme sütunu.left_on
veright_on
: Sol ve sağ veri çerçevelerinde birleştirme sütunlarını belirtmek için kullanılır.left_index
veright_index
: İndekslere göre birleştirme yapılıp yapılmayacağını belirtir.sort
: Birleştirme sonucunun sıralanıp sıralanmayacağını belirtir.
Örnek Kullanım
import pandas as pd
# İlk veri çerçevesi
data1 = {'A': [1, 2, 3],
'B': [4, 5, 6]}
df1 = pd.DataFrame(data1)
# İkinci veri çerçevesi
data2 = {'A': [1, 2, 3],
'C': [7, 8, 9]}
df2 = pd.DataFrame(data2)
# Birleştirme işlemi
result = pd.merge(df1, df2, on='A')
print(result)
Yukarıdaki örneklerde, assign()
, join()
ve merge()
metodları kullanılarak sütun ve satır eklemesi işlemleri gerçekleştirilmiştir. Bu metodlar, veri çerçevelerini birleştirmek ve yeni sütunlar eklemek için kullanışlı araçlardır.
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HisseAdi@Sektor | Hisse Adı | Sektör | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | A1 Capital@Aracı Kurumlar | A1 Capital | Aracı Kurumlar |
ACSEL | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | Acıselsan Acıpayam Selüloz@Kimyasal Ürün | Acıselsan Acıpayam Selüloz | Kimyasal Ürün |
ADEL | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | Adel Kalemcilik@Kırtasiye | Adel Kalemcilik | Kırtasiye |
ADESE | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | Adese AVM@Perakande - Ticaret | Adese AVM | Perakande - Ticaret |
AEFES | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | Anadolu Efes@Meşrubat / İçecek | Anadolu Efes | Meşrubat / İçecek |
Pandas'ta, concat() metodu, bir veya daha fazla veri çerçevesini birleştirmek için kullanılır. Bu metot, sütunlar veya satırlar boyunca birleştirme işlemi yapabilir ve esnek bir şekilde veri çerçevelerini bir araya getirebilir.
- İki veri çerçevesini birleştirelim. Bunun için bir veri çerçevesi daha oluşturalım. İlk veri çerçevesini de ilk hali ile kullanalım.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
df2 = {
'Kod':['TST'],
'Hisse Adı':['TEST'],
'Sektör':['Bankacılık'],
'Kapanış(TL)':[0],
'Piyasa Değeri(mn TL)':[0],
'Piyasa Değeri(mn $)':[0],
'Halka AçıklıkOranı (%)':[0],
'Sermaye(mn TL)':[0],
'USDTRY':26
}
df2 = pd.DataFrame(df2)
df2.set_index("Kod", inplace=True)
df2
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | USDTRY | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
TST | TEST | Bankacılık | 0 | 0 | 0 | 0 | 0 | 26 |
- İkinci veri çerçevesinde bir sütun fazla. Bu durumda birleştirme sırasında
ignore_index=True
parametresini kullanarak bunu görmezden geleceğiz.
df3 = pd.concat([df,df2], ignore_index=True)
df3
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | USDTRY | |
---|---|---|---|---|---|---|---|---|
0 | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | NaN |
1 | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | NaN |
2 | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | NaN |
3 | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | NaN |
4 | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... |
505 | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 | NaN |
506 | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 | NaN |
507 | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 | NaN |
508 | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 | NaN |
509 | TEST | Bankacılık | 0.00 | 0.0 | 0.0 | 0.0 | 0.0 | 26.0 |
510 rows × 8 columns
drop()
metodu, Pandas'ta veri çerçevesinden belirli satırları veya sütunları kaldırmak için kullanılır. Bu metod, orijinal veri çerçevesini değiştirmek yerine, belirtilen satırları veya sütunları kaldırılmış yeni bir veri çerçevesi döndürür.
- 509 numaralı indeksi kaldırmak istediğimizi varsayalım. Daha önce kullandığımız drop() fonksiyonunun içine index parametresini ekleyerek kaldırma işlemini gerçekleştirebiliriz.
df3.drop(index=509, inplace=True)
df3
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | USDTRY | |
---|---|---|---|---|---|---|---|---|
0 | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | NaN |
1 | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | NaN |
2 | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | NaN |
3 | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | NaN |
4 | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... |
504 | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 | NaN |
505 | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 | NaN |
506 | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 | NaN |
507 | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 | NaN |
508 | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 | NaN |
509 rows × 8 columns
- Yukarıda sadece bir adet indeks belirtip onu kaldırdık. Sadece Aracı Kurumlar içeren satırları indeks ile kaldırmak istediğimizi varsayalım. Önce koşulu belirteceğiz ardından da bu koşulun indekslerini alacağız.
df3.drop(index=df3[df3["Sektör"] == "Aracı Kurumlar"].index, inplace=True)
df3
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | USDTRY | |
---|---|---|---|---|---|---|---|---|
1 | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | NaN |
2 | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | NaN |
3 | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | NaN |
4 | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | NaN |
5 | Afyon Çimento | Çimento | 9.33 | 3732.0 | 143.0 | 48.6 | 400.0 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... |
504 | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 | NaN |
505 | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 | NaN |
506 | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 | NaN |
507 | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 | NaN |
508 | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 | NaN |
498 rows × 8 columns
Pandas, veri çerçeveleri üzerinde temel istatistiksel hesaplamaları gerçekleştirmek için bir dizi yöntem sunar. Bu yöntemlerle, veri çerçevesinin farklı sütunlarına veya satırlarına ilişkin istatistiksel özetler elde edebiliriz.
describe()
yöntemi, veri çerçevesinin sayısal sütunlarına ilişkin temel istatistiksel bilgileri özetler.
İstatistiksel özet:
- count: Sütundaki non-null (boş olmayan) değerlerin sayısı.
- mean: Sütundaki değerlerin ortalaması.
- std: Sütundaki değerlerin standart sapması.
- min: Sütundaki en küçük değer.
- 25%: Alt çeyrek yüzdesi, sütundaki değerlerin %25'inin altında olan değer.
- 50%: Medyan veya ortanca, sütundaki değerlerin yarısından küçük ve yarısından büyük olan değer.
- 75%: Üst çeyrek yüzdesi, sütundaki değerlerin %75'inin altında olan değer.
- max: Sütundaki en büyük değer.
df_istatiktiksel_ozet = df.drop(["Hisse Adı", "Sektör"], axis=1)
df_istatiktiksel_ozet.describe()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|
count | 509.000000 | 509.000000 | 509.000000 | 509.000000 | 509.000000 |
mean | 2796.021513 | 13682.732024 | 524.398821 | 40.691945 | 466.750884 |
std | 45015.419482 | 35616.304707 | 1365.022129 | 24.011865 | 1084.563219 |
min | 0.820000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 8.760000 | 981.600000 | 37.600000 | 22.400000 | 42.800000 |
50% | 22.940000 | 2800.000000 | 107.300000 | 33.100000 | 129.900000 |
75% | 54.750000 | 8760.000000 | 335.700000 | 54.100000 | 375.000000 |
max | 968000.000000 | 307430.500000 | 11782.500000 | 100.000000 | 10000.000000 |
mean()
yöntemi, belirli bir sütunun ortalamasını hesaplar.
df["Piyasa Değeri(mn $)"].mean()
524.3988212180747
median()
yöntemi, belirli bir sütunun medyanını hesaplar.
- Piyasa Değeri(mn $) sütununun medyan değerine bakalım.
df["Piyasa Değeri(mn $)"].median()
107.3
- Piyasa Değeri(mn TL) ve Piyasa Değeri(mn $) sütunlarının medyan değerine bakalım.
df[['Piyasa Değeri(mn TL)','Piyasa Değeri(mn $)']].median()
Piyasa Değeri(mn TL) 2800.0
Piyasa Değeri(mn $) 107.3
dtype: float64
value_counts()
metodu, bir Pandas Serisi veya veri çerçevesindeki benzersiz değerlerin sayısını hesaplamak için kullanılır. Bu metod, özellikle kategorik verilerin dağılımını anlamak veya bir sütundaki değerlerin frekansını bulmak için sıkça kullanılır.
- Sektör sütunundaki benzersiz değerleri saydıralım.
df["Sektör"].value_counts()
Sektör
GYO 41
Elektrik 36
Gıda 33
Holdingler 32
Tekstil Entegre 25
Teknoloji 17
Turizm 16
İnşaat Malzemeleri 16
Kimyasal Ürün 16
Yatırım Ortaklıkları 16
Çimento 15
Bankacılık 15
Kağıt Ürünleri 14
Perakande - Ticaret 13
Sağlık ve İlaç 12
Demir-Çelik Temel 12
Aracı Kurumlar 11
Otomotiv Parçası 10
Dayanıklı Tüketim 10
Fin.Kiralama ve Faktoring 9
Meşrubat / İçecek 9
Medya 8
Demir-Çelik Döküm 8
Otomotiv 8
Elektrik Makinları Üretimi 7
Bilgisayar Toptancılığı 7
Ulaştırma-Lojistik 7
İnşaat- Taahhüt 6
Mobilya 6
Madencilik 6
Sigorta 6
Petrol 6
Diğer 5
Boya 5
Havayolları ve Hizm. 4
Seramik 4
Deri Giyim 4
İletişim 4
Spor 4
Tarım Kimyasalları 4
Endüstriyel Tekstil 4
İletişim Cihazları 3
Pazarlama 3
Kırtasiye 2
Otomotiv Lastiği 2
Hayvancılık 2
Savunma 2
Kablo 2
Eğlence Hizmetleri 1
Cam 1
Name: count, dtype: int64
- Sektör sütunundaki değerleri saydırmıştık. Bunların yüzde paylarını normalize parametresini True yaparak alabiliriz.
df["Sektör"].value_counts(normalize=True)
Sektör
GYO 0.080550
Elektrik 0.070727
Gıda 0.064833
Holdingler 0.062868
Tekstil Entegre 0.049116
Teknoloji 0.033399
Turizm 0.031434
İnşaat Malzemeleri 0.031434
Kimyasal Ürün 0.031434
Yatırım Ortaklıkları 0.031434
Çimento 0.029470
Bankacılık 0.029470
Kağıt Ürünleri 0.027505
Perakande - Ticaret 0.025540
Sağlık ve İlaç 0.023576
Demir-Çelik Temel 0.023576
Aracı Kurumlar 0.021611
Otomotiv Parçası 0.019646
Dayanıklı Tüketim 0.019646
Fin.Kiralama ve Faktoring 0.017682
Meşrubat / İçecek 0.017682
Medya 0.015717
Demir-Çelik Döküm 0.015717
Otomotiv 0.015717
Elektrik Makinları Üretimi 0.013752
Bilgisayar Toptancılığı 0.013752
Ulaştırma-Lojistik 0.013752
İnşaat- Taahhüt 0.011788
Mobilya 0.011788
Madencilik 0.011788
Sigorta 0.011788
Petrol 0.011788
Diğer 0.009823
Boya 0.009823
Havayolları ve Hizm. 0.007859
Seramik 0.007859
Deri Giyim 0.007859
İletişim 0.007859
Spor 0.007859
Tarım Kimyasalları 0.007859
Endüstriyel Tekstil 0.007859
İletişim Cihazları 0.005894
Pazarlama 0.005894
Kırtasiye 0.003929
Otomotiv Lastiği 0.003929
Hayvancılık 0.003929
Savunma 0.003929
Kablo 0.003929
Eğlence Hizmetleri 0.001965
Cam 0.001965
Name: proportion, dtype: float64
-
min():
min()
metodu, bir Pandas Serisi veya veri çerçevesindeki en küçük değeri bulmak için kullanılır. Bu metod, sayısal değerlerin yanı sıra dizelerin alfabetik olarak en küçük değerini de bulabilir. -
max():
max()
metodu, bir Pandas Serisi veya veri çerçevesindeki en büyük değeri bulmak için kullanılır. min() metodu gibi, sayısal değerlerin yanı sıra dizelerin alfabetik olarak en büyük değerini de bulabilir. -
sum():
sum()
metodu, bir Pandas Serisi veya veri çerçevesindeki tüm değerlerin toplamını hesaplamak için kullanılır. Sayısal veriler için kullanıldığında, tüm değerlerin toplamını verir. -
std():
std()
metodu, bir Pandas Serisi veya veri çerçevesindeki değerlerin standart sapmasını hesaplamak için kullanılır. Standart sapma, bir veri kümesinin yayılma derecesini gösterir. -
nlargest():
nlargest()
metodu, bir Pandas Serisi veya veri çerçevesindeki en büyük n değeri döndürmek için kullanılır. Özellikle, serideki veya veri çerçevesindeki en büyük değerlere göre sıralanmış ilk n satırı döndürür. -
nsmallest():
nsmallest()
metodu, bir Pandas Serisi veya veri çerçevesindeki en küçük n değeri döndürmek için kullanılır. Özellikle, serideki veya veri çerçevesindeki en küçük değerlere göre sıralanmış ilk n satırı döndürür.
- Sektör sütununa göre sektörlerin piyasa değerlerinin medyanını Piyasa Değeri(mn $) sütununu kullanarak alalım.
df.groupby(["Sektör"])["Piyasa Değeri(mn $)"].median()
Sektör
Aracı Kurumlar 92.90
Bankacılık 1200.60
Bilgisayar Toptancılığı 180.80
Boya 78.20
Cam 5482.60
Dayanıklı Tüketim 113.00
Demir-Çelik Döküm 52.80
Demir-Çelik Temel 391.50
Deri Giyim 32.75
Diğer 36.20
Elektrik 368.85
Elektrik Makinları Üretimi 84.30
Endüstriyel Tekstil 787.85
Eğlence Hizmetleri 92.90
Fin.Kiralama ve Faktoring 116.10
GYO 152.00
Gıda 84.20
Havayolları ve Hizm. 2055.25
Hayvancılık 179.55
Holdingler 150.35
Kablo 161.90
Kağıt Ürünleri 73.90
Kimyasal Ürün 30.60
Kırtasiye 129.65
Madencilik 187.75
Medya 43.60
Meşrubat / İçecek 81.20
Mobilya 73.30
Otomotiv 1313.80
Otomotiv Lastiği 481.65
Otomotiv Parçası 185.10
Pazarlama 99.30
Perakande - Ticaret 122.90
Petrol 486.50
Savunma 2695.80
Sağlık ve İlaç 148.55
Seramik 86.50
Sigorta 271.85
Spor 198.10
Tarım Kimyasalları 1616.05
Teknoloji 40.20
Tekstil Entegre 62.00
Turizm 84.95
Ulaştırma-Lojistik 114.60
Yatırım Ortaklıkları 13.95
Çimento 294.80
İletişim 1545.80
İletişim Cihazları 138.00
İnşaat Malzemeleri 54.20
İnşaat- Taahhüt 436.15
Name: Piyasa Değeri(mn $), dtype: float64
- Sektör sütununa göre sektörlerin piyasa değerlerinin medyanını Piyasa Değeri(mn $) sütununu kullanarak alalım. Bunun yanına bir de standart sapma ekleyelim.
df.groupby(["Sektör"])["Piyasa Değeri(mn $)"].agg(["median", "std"]).head(10)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
median | std | |
---|---|---|
Sektör | ||
Aracı Kurumlar | 92.90 | 290.963678 |
Bankacılık | 1200.60 | 2351.133754 |
Bilgisayar Toptancılığı | 180.80 | 158.379538 |
Boya | 78.20 | 86.639194 |
Cam | 5482.60 | NaN |
Dayanıklı Tüketim | 113.00 | 1096.187345 |
Demir-Çelik Döküm | 52.80 | 120.470278 |
Demir-Çelik Temel | 391.50 | 1676.347230 |
Deri Giyim | 32.75 | 47.669723 |
Diğer | 36.20 | 41.722979 |
- Sütun isimlerini güncelleyebiliriz.
df.groupby(["Sektör"])["Piyasa Değeri(mn $)"].agg(Medyan="median", StandartSapma="std").head(15)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Medyan | StandartSapma | |
---|---|---|
Sektör | ||
Aracı Kurumlar | 92.90 | 290.963678 |
Bankacılık | 1200.60 | 2351.133754 |
Bilgisayar Toptancılığı | 180.80 | 158.379538 |
Boya | 78.20 | 86.639194 |
Cam | 5482.60 | NaN |
Dayanıklı Tüketim | 113.00 | 1096.187345 |
Demir-Çelik Döküm | 52.80 | 120.470278 |
Demir-Çelik Temel | 391.50 | 1676.347230 |
Deri Giyim | 32.75 | 47.669723 |
Diğer | 36.20 | 41.722979 |
Elektrik | 368.85 | 444.925170 |
Elektrik Makinları Üretimi | 84.30 | 1092.344980 |
Endüstriyel Tekstil | 787.85 | 5562.638314 |
Eğlence Hizmetleri | 92.90 | NaN |
Fin.Kiralama ve Faktoring | 116.10 | 140.352863 |
10.1.7 Bir String İçeriğine Göre Bir İstatistik: groupby(), apply(), lambda, str.contains() ve sum()
- Hisse Adı** sütununda Enerji içeren hisseleri HalkaAciklikOraniGrup sütununa göre saydıralım.
df["HalkaAciklikOraniGrup"] = df["Halka AçıklıkOranı (%)"].apply(lambda x: ">50" if x > 50 else "<=50")
df.groupby(['HalkaAciklikOraniGrup']).apply(lambda x: x['Hisse Adı'].str.contains('Enerji').sum())
# veya
df.groupby(['HalkaAciklikOraniGrup'])['Hisse Adı'].apply(lambda x: x.str.contains('Enerji').sum())
HalkaAciklikOraniGrup
<=50 21
>50 6
Name: Hisse Adı, dtype: int64
- sort_values() Metodu:
- Syntax:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, na_position='last', ignore_index=False)
- Parametreler:
- by: Sıralama yapılacak sütunun adı veya sütunların listesi.
- axis: Sıralama işleminin sütunlar (axis=0) veya satırlar (axis=1) boyunca yapılacağını belirten bir sayı veya etiket. Varsayılan değeri 0'dır.
- ascending: Sıralama sırasının artan (True) veya azalan (False) olacağını belirleyen bir boolean değer. Varsayılan değeri True'dur.
- inplace: Değişikliklerin orijinal DataFrame üzerinde yapılmasını sağlayan bir boolean değer. Varsayılan değeri False'dur.
- na_position: NaN değerlerin nereye yerleştirileceğini belirleyen bir string. "first" veya "last" olabilir. Varsayılan değeri "last"tir.
- ignore_index: Yeniden indeksleme yapılıp yapılmayacağını belirleyen bir boolean değer. Varsayılan değeri False'dur.
- Parametreler:
- sort_index() Metodu:
- Syntax:
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False)
-
Parametreler:
- level: İndekslerin hiyerarşik indekslenmesi durumunda, hangi seviyede sıralama yapılacağını belirten bir sayı veya etiket.
- kind: Sıralama algoritmasını belirleyen bir string. "quicksort", "mergesort", "heapsort" veya "stable" olabilir. Varsayılan değeri "quicksort"tir.
- sort_remaining: Hiçbir seviyede sıralama yapılmayan indekslerin sıralanıp sıralanmayacağını belirleyen bir boolean değer. Varsayılan değeri True'dur.
-
- Veri çerçevesini Piyasa Değeri(mn $) sütununa göre sıralayalım.
df.sort_values(by="Piyasa Değeri(mn $)", inplace=True)
df
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
ISKUR | İş Bankası Kurucu | Bankacılık | 968000.00 | 0.0 | 0.0 | 28.7 | 0.0 |
MMCAS | MMC San.ve Tic. Yatırımlar A.Ş | Ulaştırma-Lojistik | 4.90 | 65.4 | 2.5 | 92.9 | 13.3 |
DIRIT | Diriteks Diriliş Tekstil | Tekstil Entegre | 7.35 | 78.3 | 3.0 | 93.9 | 10.7 |
BRMEN | Birlik Mensucat | Tekstil Entegre | 2.17 | 96.8 | 3.7 | 71.4 | 44.6 |
ETYAT | Euro Trend Yatırım | Yatırım Ortaklıkları | 6.43 | 128.6 | 4.9 | 93.4 | 20.0 |
... | ... | ... | ... | ... | ... | ... | ... |
ENKAI | Enka İnşaat | İnşaat- Taahhüt | 30.16 | 180960.0 | 6935.4 | 8.9 | 6000.0 |
KCHOL | Koç Holding | Holdingler | 108.90 | 276159.3 | 10584.0 | 26.4 | 2535.9 |
FROTO | Ford Otosan | Otomotiv | 837.70 | 293957.3 | 11266.1 | 17.8 | 350.9 |
THYAO | Türk Hava Yolları | Havayolları ve Hizm. | 216.60 | 298908.0 | 11455.9 | 50.4 | 1380.0 |
SASA | Sasa Polyester Sanayi A.Ş. | Endüstriyel Tekstil | 58.05 | 307430.5 | 11782.5 | 24.2 | 5296.0 |
509 rows × 7 columns
- Yukarıda küçükten büyüğe doğru sıraladık. Şimdi ise büyükten küçüğe doğru sıralayalım.
df.sort_values(by="Piyasa Değeri(mn $)", ascending=False, inplace=True)
df
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
SASA | Sasa Polyester Sanayi A.Ş. | Endüstriyel Tekstil | 58.05 | 307430.5 | 11782.5 | 24.2 | 5296.0 |
THYAO | Türk Hava Yolları | Havayolları ve Hizm. | 216.60 | 298908.0 | 11455.9 | 50.4 | 1380.0 |
FROTO | Ford Otosan | Otomotiv | 837.70 | 293957.3 | 11266.1 | 17.8 | 350.9 |
KCHOL | Koç Holding | Holdingler | 108.90 | 276159.3 | 10584.0 | 26.4 | 2535.9 |
ENKAI | Enka İnşaat | İnşaat- Taahhüt | 30.16 | 180960.0 | 6935.4 | 8.9 | 6000.0 |
... | ... | ... | ... | ... | ... | ... | ... |
ETYAT | Euro Trend Yatırım | Yatırım Ortaklıkları | 6.43 | 128.6 | 4.9 | 93.4 | 20.0 |
BRMEN | Birlik Mensucat | Tekstil Entegre | 2.17 | 96.8 | 3.7 | 71.4 | 44.6 |
DIRIT | Diriteks Diriliş Tekstil | Tekstil Entegre | 7.35 | 78.3 | 3.0 | 93.9 | 10.7 |
MMCAS | MMC San.ve Tic. Yatırımlar A.Ş | Ulaştırma-Lojistik | 4.90 | 65.4 | 2.5 | 92.9 | 13.3 |
ISKUR | İş Bankası Kurucu | Bankacılık | 968000.00 | 0.0 | 0.0 | 28.7 | 0.0 |
509 rows × 7 columns
- Sektör sütununa göre artan ve Piyasa Değeri(mn $) sütununa göre azalan şekilde sıralayalım.
df.sort_values(by=["Sektör", "Piyasa Değeri(mn $)"], ascending=[True, False], inplace=True)
df
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
ISMEN | İş Yatırım | Aracı Kurumlar | 69.35 | 24619.3 | 943.6 | 29.2 | 355.0 |
OYYAT | Oyak Yatırım | Aracı Kurumlar | 53.20 | 15960.0 | 611.7 | 30.3 | 300.0 |
GEDIK | Gedik Yatırım | Aracı Kurumlar | 8.97 | 4529.9 | 173.6 | 14.0 | 505.0 |
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
GLCVY | Gelecek Varlık Yön. | Aracı Kurumlar | 25.40 | 3548.4 | 136.0 | 18.9 | 139.7 |
... | ... | ... | ... | ... | ... | ... | ... |
BIENY | Bien Yapı | İnşaat- Taahhüt | 44.72 | 16143.9 | 618.7 | 20.0 | 361.0 |
TKFEN | Tekfen Holding | İnşaat- Taahhüt | 39.90 | 14763.0 | 565.8 | 49.4 | 370.0 |
YEOTK | YEO Teknoloji | İnşaat- Taahhüt | 83.30 | 7996.8 | 306.5 | 30.3 | 96.0 |
KUYAS | Kuyas Yatırım AŞ | İnşaat- Taahhüt | 38.26 | 3826.0 | 146.6 | 99.7 | 100.0 |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
509 rows × 7 columns
- İndekse göre artan bir şekilde sıralayalım.
df.sort_index(inplace=True)
df
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 |
509 rows × 7 columns
- İndekse göre azalan bir şekilde de sıralayalım.
df.sort_index(ascending=False, inplace=True)
df
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
ZRGYO | Ziraat GYO | GYO | 4.67 | 21919.2 | 840.1 | 18.9 | 4693.6 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
... | ... | ... | ... | ... | ... | ... | ... |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
509 rows × 7 columns
- Sektör sütununu alıp seri olacak şekilde bir sıralama yapabiliriz.
df["Sektör"].sort_values()
Kod
A1CAP Aracı Kurumlar
BRKVY Aracı Kurumlar
GEDIK Aracı Kurumlar
GLBMD Aracı Kurumlar
GLCVY Aracı Kurumlar
...
YYAPI İnşaat- Taahhüt
YEOTK İnşaat- Taahhüt
BIENY İnşaat- Taahhüt
KUYAS İnşaat- Taahhüt
TKFEN İnşaat- Taahhüt
Name: Sektör, Length: 509, dtype: object
- Piyasa Değeri(mn $) sütununa göre piyasa değeri dolar cinsinden en yüksek 10'a bakalım.
df.nlargest(10, "Piyasa Değeri(mn $)")
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
SASA | Sasa Polyester Sanayi A.Ş. | Endüstriyel Tekstil | 58.05 | 307430.5 | 11782.5 | 24.2 | 5296.0 |
THYAO | Türk Hava Yolları | Havayolları ve Hizm. | 216.60 | 298908.0 | 11455.9 | 50.4 | 1380.0 |
FROTO | Ford Otosan | Otomotiv | 837.70 | 293957.3 | 11266.1 | 17.8 | 350.9 |
KCHOL | Koç Holding | Holdingler | 108.90 | 276159.3 | 10584.0 | 26.4 | 2535.9 |
ENKAI | Enka İnşaat | İnşaat- Taahhüt | 30.16 | 180960.0 | 6935.4 | 8.9 | 6000.0 |
TUPRS | Tüpraş | Petrol | 88.05 | 169654.4 | 6502.1 | 46.5 | 1926.8 |
QNBFB | QNB Finansbank | Bankacılık | 48.50 | 162475.0 | 6227.0 | 0.1 | 3350.0 |
SISE | Şişecam | Cam | 46.70 | 143052.1 | 5482.6 | 48.9 | 3063.2 |
ISCTR | İş Bankası (C) | Bankacılık | 13.92 | 139199.6 | 5334.9 | 32.6 | 10000.0 |
GARAN | Garanti Bankası | Bankacılık | 33.10 | 139020.0 | 5328.0 | 14.0 | 4200.0 |
- Piyasa Değeri(mn $) sütununa göre piyasa değeri dolar cinsinden en düşük 10'a bakalım.
df.nsmallest(10, "Piyasa Değeri(mn $)")
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
ISKUR | İş Bankası Kurucu | Bankacılık | 968000.00 | 0.0 | 0.0 | 28.7 | 0.0 |
MMCAS | MMC San.ve Tic. Yatırımlar A.Ş | Ulaştırma-Lojistik | 4.90 | 65.4 | 2.5 | 92.9 | 13.3 |
DIRIT | Diriteks Diriliş Tekstil | Tekstil Entegre | 7.35 | 78.3 | 3.0 | 93.9 | 10.7 |
BRMEN | Birlik Mensucat | Tekstil Entegre | 2.17 | 96.8 | 3.7 | 71.4 | 44.6 |
ETYAT | Euro Trend Yatırım | Yatırım Ortaklıkları | 6.43 | 128.6 | 4.9 | 93.4 | 20.0 |
EUKYO | Euro Kapital Yatırım Ortaklığı | Yatırım Ortaklıkları | 6.97 | 139.4 | 5.3 | 99.5 | 20.0 |
EUYO | Euro Menkul | Yatırım Ortaklıkları | 7.76 | 155.2 | 5.9 | 99.2 | 20.0 |
EKIZ | Ekiz Yağ ve Sabun | Gıda | 17.25 | 160.2 | 6.1 | 62.1 | 9.3 |
SNKRN | Senkron Güvenlik | Teknoloji | 22.40 | 175.8 | 6.7 | 88.4 | 7.8 |
MARKA | Marka Yatırım Holding | Holdingler | 9.35 | 196.3 | 7.5 | 99.2 | 21.0 |
Pandas'ta, veri çerçevesindeki değerleri gruplayarak saydırma, yüzde alma ve indeks inceleme gibi işlemler yapmak için groupby()
, value_counts()
, normalize
ve loc
gibi metodlar kullanılır.
1) groupby() Metodu
groupby()
metodu, belirli bir sütuna göre veriyi gruplayarak analiz etmeyi sağlar. Bu metod, bir sütuna göre gruplandırılan veri kümeleri üzerinde işlem yapmamıza olanak tanır.
2) value_counts() Metodu
value_counts()
metodu, belirli bir sütundaki benzersiz değerlerin sayısını bulmak için kullanılır. Bu metod, özellikle kategorik verilerin dağılımını analiz etmek için kullanılır.
3) normalize Parametresi
normalize
parametresi,value_counts()
metodunda kullanılarak sonuçların normalize edilmesini sağlar. Bu parametre sayesinde, sonuçlar yüzdelik olarak elde edilir.
4) loc Metodu
loc
metodu, belirli bir satır veya sütun etiketine göre veriye erişmek için kullanılır. Bu metod, etiket tabanlı indeksleme yapmamıza olanak tanır.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
- Halka AçıklıkOranı (%) sütununa göre yeni bir sütun oluşturalım. 50'den büyüksek >50; küçük veya eşitse <=50 yazsın.
df["HalkaAciklikOraniGrup"] = df["Halka AçıklıkOranı (%)"].apply(lambda x: ">50" if x > 50 else "<=50")
df.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | HalkaAciklikOraniGrup | |
---|---|---|---|---|---|---|---|---|
Kod | ||||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 | <=50 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 | >50 |
ADEL | Adel Kalemcilik | Kırtasiye | 245.00 | 5788.1 | 221.8 | 27.7 | 23.6 | <=50 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 | >50 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 | <=50 |
- Şimdi Sektör sütununa göre HalkaAciklikOraniGrup sütununu saydıralım.
df.groupby(["Sektör"])["HalkaAciklikOraniGrup"].value_counts()
Sektör HalkaAciklikOraniGrup
Aracı Kurumlar <=50 10
>50 1
Bankacılık <=50 14
>50 1
Bilgisayar Toptancılığı <=50 5
..
İletişim Cihazları <=50 3
İnşaat Malzemeleri <=50 9
>50 7
İnşaat- Taahhüt <=50 4
>50 2
Name: count, Length: 90, dtype: int64
- İstediğimizi elde ettik. Son olarak örneğin, Teknoloji sektörüne bakalım.
df.groupby(["Sektör"])["HalkaAciklikOraniGrup"].value_counts().loc["Teknoloji"]
HalkaAciklikOraniGrup
<=50 9
>50 8
Name: count, dtype: int64
- Görüldüğü üzere, ilgilendiğimiz sektördeki halka açıklık dağılımı bilgisine gruplandırılmış olarak ulaştık. Aynı bilgiye yüzde olarak da erişebiliriz.
df.groupby(["Sektör"])["HalkaAciklikOraniGrup"].value_counts(normalize=True).loc["Teknoloji"]
HalkaAciklikOraniGrup
<=50 0.529412
>50 0.470588
Name: proportion, dtype: float64
pd.cut()
fonksiyonu, belirli bir veri serisini kullanarak, belirli aralıklara bölerek kategorik bir değişken oluşturmanızı sağlar. Bu fonksiyon, özellikle sürekli bir değişkeni kategorik bir değişkene dönüştürmek için kullanışlıdır. Örneğin, yaş verilerini kullanarak farklı yaş grupları oluşturabilirsiniz.
pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
x
: Bölünecek olan veri serisi.bins
: Veri serisini bölecek aralıkları belirten bir sayı, liste veya dizin. Aralıkların sayısını belirtmek için bir sayı, aralık sınırlarını belirtmek için bir liste veya dizin kullanabilirsiniz.labels
: Oluşturulan kategorik değişkenler için etiketleri belirten bir liste. Bu parametre, belirtilmezse, otomatik olarak aralık sınırlarının ortalamalarını kullanır.right
: True veya False değer alır. True ise aralık sınırları dahil, False ise aralık sınırları dahil değil olarak hesaplanır. Varsayılan değeri True'dur.include_lowest
: True veya False değer alır. True ise en düşük aralık sınırı dahil, False ise dahil değil olarak hesaplanır. Varsayılan değeri False'dur.precision
: Aralıkların sayısal hassasiyetini belirler.duplicates
: Aralık sınırları arasında
pd.qcut()
fonksiyonu, veri serisini belirli sayıda eşit boyutlu kategoriye böler. Bu bölmeyi yaparken, her kategori içinde aynı sayıda gözlem olacak şekilde böler. Bu fonksiyon, verilerin dağılımına göre eşit büyüklükte kategorilere ayırmanızı sağlar.
pd.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
x
: Bölünecek olan veri serisi.q
: Bölünme işlemi sırasında oluşturulacak kategori sayısı veya kategori boyutlarını belirleyen kesim noktaları.labels
: Oluşturulan kategorik değişkenler için etiketleri belirten bir liste. Bu parametre, belirtilmezse, otomatik olarak kesim noktalarının ortalamalarını kullanır.retbins
: True veya False değer alır. True ise kesim noktalarını ve sınırlarını döndürür, False ise sadece kesim noktalarını döndürür. Varsayılan değeri False'dur.precision
: Kesim noktalarının sayısal hassasiyetini belirler.duplicates
: Kesim noktaları arasında çakışan değerler olması durumunda nasıl davranılacağını belirler. "raise" (varsayılan), "drop" veya "raise" değerlerini alır.
import pandas as pd
# Örnek bir veri serisi oluşturalım
notlar = [60, 75, 80, 85, 90, 95, 100]
# Veri serisini belirli sayıda eşit boyutlu kategoriye bölelim
not_gruplari = pd.qcut(x=notlar, q=3, labels=['Düşük', 'Orta', 'Yüksek'])
print(not_gruplari)
['Düşük', 'Düşük', 'Düşük', 'Orta', 'Orta', 'Yüksek', 'Yüksek']
Categories (3, object): ['Düşük' < 'Orta' < 'Yüksek']
Pandas'ta, eksik verilerle başa çıkmak için çeşitli metodlar bulunmaktadır. Bunlar arasında en sık kullanılanlar isnull()
ve notnull()
fonksiyonları, dropna()
, fillna()
ve replace()
metodlarıdır.
-
isnull()
metodu, veri çerçevesindeki her hücredeki değerin eksik (NaN) olup olmadığını kontrol eder. Eksik bir değer varsa, True; aksi takdirde False döndürür. -
notnull()
metodu ise isnull() metodunun tam tersidir. Eksik olmayan (NaN olmayan) değerler için True, eksik değerler için False döndürür.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/repolarim/pandas-tutorial/pandas-tutorial/temelozet.xlsx', index_col="Kod")
import numpy as np
np.random.seed(34)
random_satirlar = df.sample(n=200)
df2 = df
df2.loc[random_satirlar.index, ['Kapanış(TL)','Piyasa Değeri(mn $)']] = np.nan
df2
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | NaN | 5788.1 | NaN | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | NaN | 21919.2 | NaN | 18.9 | 4693.6 |
509 rows × 7 columns
-
- np.random.seed(34): Bu satır, rastgele sayı üretirken kullanılan seed'in belirlenmesini sağlar. Böylece, aynı seed ile çalışıldığında her seferinde aynı rastgele sayılar elde edilir.
-
- random_satirlar = df.sample(n=200): Bu satır, DataFrame içinden rastgele 200 satırı seçer ve random_satirlar adlı yeni bir DataFrame'e atar. sample() fonksiyonunun n parametresi, kaç tane rastgele satır seçileceğini belirler.
-
- df2 = df: Bu satır, df DataFrame'inin bir kopyasını oluşturur ve bu kopyayı df2 adlı yeni bir değişkene atar. Bu, df ve df2 değişkenlerinin aynı DataFrame'i göstermesine neden olur.
-
-
df2.loc[random_satirlar.index, ['Kapanış(TL)','Piyasa Değeri(mn $)']] = np.nan:
Bu satır, df2 DataFrame'inin belirli satır ve sütunlarını NaN (Not a Number) değerlerine atar. loc[] yöntemi, belirli satır ve sütunları seçmek için kullanılır. random_satirlarindex, random_satirlar DataFrame'indeki rastgele seçilmiş satırların indekslerini temsil eder. Bu indekslerle seçilen satırların "Kapanış(TL)" ve "Piyasa Değeri(mn $) " sütunlarına np.nan değerleri atanır. Böylece, bu satırlardaki veriler silinmiş olur.
-
-
- df2: Bu satır, değişikliklerin uygulandığı df2 DataFrame'ini gösterir. Bu DataFrame, orijinal DataFrame'in bir kopyası olup, belirli satırlardaki veriler NaN değerleriyle değiştirilmiştir.
-
Her bir sütunda kaç adet NaN değer olduğunu bulalım.
df2.isnull().sum()
Hisse Adı 0
Sektör 0
Kapanış(TL) 200
Piyasa Değeri(mn TL) 0
Piyasa Değeri(mn $) 200
Halka AçıklıkOranı (%) 0
Sermaye(mn TL) 0
dtype: int64
Eğer yukarıda bir sum() daha eklersek toplam NaN sayısını alırız.
df2.isnull().sum().sum()
400
dropna()
metodu, veri çerçevesindeki eksik değerleri (NaN) içeren satırları veya sütunları kaldırmak için kullanılır. axis parametresiyle satır veya sütun bazında kaldırma seçeneği bulunur. axis değeri 1 iken sütun bazında, 0 ken satır bazında işlem yapılır.
- dropna() kullanarak NaN içeren satırları kaldıralım.
df2.dropna()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
AFYON | Afyon Çimento | Çimento | 9.33 | 3732.0 | 143.0 | 48.6 | 400.0 |
... | ... | ... | ... | ... | ... | ... | ... |
YUNSA | Yünsa | Tekstil Entegre | 137.90 | 4021.2 | 154.1 | 42.1 | 29.2 |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
309 rows × 7 columns
509 satırlık veri çerçevesinin iki sütununa 200 adet NaN atamıştık. 200'ünü de kaldırıp 309 satırlık bir veri çerçevesi bıraktı.
- dropna() fonksiyonunu aşağıdaki gibi özelleştirerek de kullanabilirdik.
df2.dropna(axis='index', how='all', subset=['Kapanış(TL)','Piyasa Değeri(mn $)'])
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
AFYON | Afyon Çimento | Çimento | 9.33 | 3732.0 | 143.0 | 48.6 | 400.0 |
... | ... | ... | ... | ... | ... | ... | ... |
YUNSA | Yünsa | Tekstil Entegre | 137.90 | 4021.2 | 154.1 | 42.1 | 29.2 |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
309 rows × 7 columns
-
df2.dropna(axis='index', how='all', subset=['Kapanış(TL)','Piyasa Değeri(mn $)']): Bu satır, df2 DataFrame'inden NaN (boş) değerlere sahip satırları kaldırmak için kullanılır.
-
axis='index': Bu parametre, işlemin satırlar boyunca (axis=0) veya sütunlar boyunca (axis=1) yapılacağını belirtir. Burada, satırlar boyunca işlem yapılacağını belirtmek için 'index' değeri kullanılmıştır.
-
how='all': Bu parametre, satırda tüm değerlerin NaN olması durumunda satırın kaldırılıp kaldırılmayacağını belirler. 'all' değeri, satırın tüm değerleri NaN ise satırın kaldırılacağını belirtir.
-
subset=['Kapanış(TL)','Piyasa Değeri(mn $)']:
Bu parametre, işlemin hangi sütunlarda yapılacağını belirtir. Yalnızca belirtilen sütunlardaki NaN değerlere sahip satırlar işleme alınır. Burada, "Kapanış(TL)" ve "Piyasa Değeri (mn $)" sütunlarında NaN değerlere sahip satırlar işleme alınacaktır.
replace():
- replace() metodu, eksik değerleri başka bir değerle değiştirmek için kullanılabilir. Özellikle, belirli bir değeri başka bir değerle değiştirmek için kullanılır. Eksik değerler de bu şekilde değiştirilebilir
fillna():
-
fillna() metodu, eksik değerleri belirli bir değerle doldurmak için kullanılır. Bu metot, eksik değerleri istenilen bir değerle (örneğin 0 veya bir ortalama değer) doldurarak veri setindeki eksik değerleri doldurmak için kullanılır.
-
Bazı sütunların bazı değerlerini NaN değil de Veri Yok yazdığımızı düşünelim. Sonra Veri Yok yazan değerleri NaN ile değiştirelim.
import pandas as pd
df = pd.read_excel('C:/Users/Yusuf Altuntaş/Desktop/pandasv2/temelozet.xlsx', index_col="Kod")
import numpy as np
np.random.seed(34)
random_satirlar = df.sample(n=200)
df2 = df
df2.loc[random_satirlar.index, ['Kapanış(TL)','Piyasa Değeri(mn $)']] = 'Veri Yok'
df2
C:\Users\Yusuf Altuntaş\AppData\Local\Temp\ipykernel_26912\53941387.py:6: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value 'Veri Yok' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.
df2.loc[random_satirlar.index, ['Kapanış(TL)','Piyasa Değeri(mn $)']] = 'Veri Yok'
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.8 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | Veri Yok | 5788.1 | Veri Yok | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.8 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.5 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | Veri Yok | 21919.2 | Veri Yok | 18.9 | 4693.6 |
509 rows × 7 columns
df2.replace(to_replace='Veri Yok', value=np.nan, inplace=True)
df2
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | NaN | 5788.1 | NaN | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | NaN | 21919.2 | NaN | 18.9 | 4693.6 |
509 rows × 7 columns
df2.replace(to_replace='Veri Yok', value=np.nan, inplace=True): Bu satır, DataFrame'deki "Veri Yok" değerlerini NaN (boş) değerlere dönüştürmek için kullanılır.
-
to_replace='Veri Yok': Bu parametre, değiştirilecek değeri belirtir. Burada, "Veri Yok" değerleri değiştirilecek.
-
value=np.nan: Bu parametre, değiştirme işleminde kullanılacak yeni değeri belirtir. np.nan, NaN (boş) değeri temsil eder. Yani, "Veri Yok" değerleri NaN değerleriyle değiştirilir.
-
inplace=True: Bu parametre, değişikliklerin orijinal DataFrame üzerinde yapılmasını sağlar. Yani, değiştirme işlemi orijinal DataFrame üzerinde gerçekleşir.
-
Şimdi de NaN içeren değerleri bizim belirlediğimiz bir string ifadeye çevirelim. Bunu da
fillna()
fonksiyonuyla yapalım.
df2.fillna(value="Veri Yok")
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.8 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | Veri Yok | 5788.1 | Veri Yok | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.8 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.5 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | Veri Yok | 21919.2 | Veri Yok | 18.9 | 4693.6 |
509 rows × 7 columns
ffill()
, "forward fill" olarak da bilinen bir Pandas metodu olan "ileri doldurma" işlemini gerçekleştirir. Bu metod, bir veri çerçevesindeki eksik değerleri bir önceki geçerli değerle doldurur. Eksik değerlerin olduğu yerlerde, bu yöntem bir önceki satır veya sütundaki değeri kullanarak eksik değerleri doldurur.
Kullanımı
DataFrame.ffill(axis=None, inplace=False, limit=None, downcast=None)
axis
: İleri doldurma işleminin satır (0) veya sütun (1) bazında yapılacağını belirtir. Varsayılan değeri None'dir ve eksik değerlerin her iki yönde de doldurulmasını sağlar.inplace
: Değişikliklerin orijinal DataFrame üzerinde yapılıp yapılmayacağını belirtir. Varsayılan değeri False'dur.limit
: İleri doldurma işleminin maksimum kaç adımda yapılacağını belirtir.downcast
: İleri doldurma işlemi sonucunda veri türlerinin küçültülüp küçültülmeyeceğini belirtir.
bfill()
, "backward fill" olarak da bilinen bir Pandas metodu olan "geri doldurma" işlemini gerçekleştirir. Bu metod, bir veri çerçevesindeki eksik değerleri bir sonraki geçerli değerle doldurur. Eksik değerlerin olduğu yerlerde, bu yöntem bir sonraki satır veya sütundaki değeri kullanarak eksik değerleri doldurur.
Kullanımı
DataFrame.bfill(axis=None, inplace=False, limit=None, downcast=None)
axis
: Geri doldurma işleminin satır (0) veya sütun (1) bazında yapılacağını belirtir. Varsayılan değeri None'dir ve eksik değerlerin her iki yönde de doldurulmasını sağlar.inplace
: Değişikliklerin orijinal DataFrame üzerinde yapılıp yapılmayacağını belirtir. Varsayılan değeri False'dur.limit
: Geri doldurma işleminin maksimum kaç adımda yapılacağını belirtir.downcast
: Geri doldurma işlemi sonucunda veri türlerinin küçültülüp küçültülmeyeceğini belirtir.
import numpy as np
np.random.seed(34)
random_satirlar = df.sample(n=200)
df2 = df
df2.loc[random_satirlar.index, ['Kapanış(TL)','Piyasa Değeri(mn $)']] = np.nan
df2.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | NaN | 5788.1 | NaN | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
df2.ffill()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
Hisse Adı | Sektör | Kapanış(TL) | Piyasa Değeri(mn TL) | Piyasa Değeri(mn $) | Halka AçıklıkOranı (%) | Sermaye(mn TL) | |
---|---|---|---|---|---|---|---|
Kod | |||||||
A1CAP | A1 Capital | Aracı Kurumlar | 26.80 | 3618.0 | 138.7 | 25.9 | 135.0 |
ACSEL | Acıselsan Acıpayam Selüloz | Kimyasal Ürün | 84.25 | 903.3 | 34.6 | 51.8 | 10.7 |
ADEL | Adel Kalemcilik | Kırtasiye | 84.25 | 5788.1 | 34.6 | 27.7 | 23.6 |
ADESE | Adese AVM | Perakande - Ticaret | 1.62 | 1633.0 | 62.6 | 92.9 | 1008.0 |
AEFES | Anadolu Efes | Meşrubat / İçecek | 70.85 | 41950.7 | 1607.8 | 32.9 | 592.1 |
... | ... | ... | ... | ... | ... | ... | ... |
YYAPI | Yesil Yapi | İnşaat- Taahhüt | 2.72 | 875.0 | 33.5 | 72.2 | 321.7 |
YYLGD | Yayla Agro Gıda | Gıda | 31.32 | 14801.8 | 567.3 | 15.0 | 472.6 |
ZEDUR | Zedur Enerji | Elektrik | 49.80 | 1245.0 | 47.7 | 38.6 | 25.0 |
ZOREN | Zorlu Enerji | Elektrik | 3.50 | 17500.0 | 670.7 | 30.0 | 5000.0 |
ZRGYO | Ziraat GYO | GYO | 3.50 | 21919.2 | 670.7 | 18.9 | 4693.6 |
509 rows × 7 columns
Veri analizi sırasında, veri çerçevesinde bulunan sütunların veri tiplerini dönüştürmek gerekebilir. Pandas, bu tür dönüşümleri gerçekleştirmek için çeşitli fonksiyonlar ve metodlar sunar. Bu dönüşümler, veri işleme ve analiz süreçlerinde veri uyumluluğunu sağlamak, hesaplama ve analiz yapmak için uygun veri türlerini kullanmak ve veri manipülasyonunu kolaylaştırmak için önemlidir. İşte yaygın olarak kullanılan bazı veri türü dönüşüm yöntemleri:
astype()
metodu, belirli bir sütunun veri tipini değiştirmek için kullanılır. Bu metot, belirli bir sütunu farklı bir veri tipine dönüştürmek için kullanılır.
# Örnek bir DataFrame oluşturalım
import pandas as pd
data = {'A': [1, 2, 3],
'B': [4.0, 5.0, 6.0],
'C': ['7', '8', '9']}
df = pd.DataFrame(data)
# 'C' sütununun veri tipini string'den integer'a dönüştürme
df['C'] = df['C'].astype(int)
print(df.dtypes)
to_numeric()
fonksiyonu, belirli bir sütunu sayısal veri tipine dönüştürmek için kullanılır. Bu fonksiyon, özellikle bir sütunda hem sayısal hem de non-sayısal değerler varsa kullanışlıdır.
# 'C' sütununu sayısal veri tipine dönüştürme
df['C'] = pd.to_numeric(df['C'], errors='coerce')
print(df.dtypes)
to_datetime()
fonksiyonu, belirli bir sütunu tarih/zaman veri tipine dönüştürmek için kullanılır.
# 'D' sütununu tarih/zaman veri tipine dönüştürme
df['D'] = pd.to_datetime(df['D'])
print(df.dtypes)
astype()
metodu vemap()
fonksiyonu birlikte kullanılarak kategorik bir sütunu kategorik veri tipine dönüştürebiliriz.
# 'E' sütununu kategorik veri tipine dönüştürme
df['E'] = df['E'].astype(str)
df['E'] = df['E'].map({'dog': 1, 'cat': 2})
print(df.dtypes)
Bu örneklerde, astype()
, to_numeric()
, to_datetime()
ve map()
fonksiyonlarının kullanımıyla veri türü dönüşümlerini gerçekleştirebiliriz. Bu yöntemler, veri analizi ve işlemlerinde veri uyumluluğunu sağlamak için önemlidir.
Veri analizi sırasında, bir veri çerçevesindeki tekrar eden değerlerin kaldırılması genellikle önemlidir çünkü bu tür değerlerin analiz sonuçlarını yanıltabileceği ve gereksiz bilgi yükü oluşturabileceği görülür. Pandas, veri çerçevesindeki tekrar eden değerleri kaldırmak için çeşitli yöntemler sunar.
drop_duplicates()
metodu, veri çerçevesindeki tekrar eden satırları kaldırmak için kullanılır. Bu metot, belirtilen sütunlar arasında tekrar eden satırları kaldırabilir veya tüm sütunlar dikkate alınarak tekrar eden satırları kaldırabilir.
Kullanımı
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
subset
: Tekrar eden satırları kontrol etmek için belirli sütunları belirtir. Varsayılan değeri None'dır ve tüm sütunlar dikkate alınır.keep
: Tekrar eden satırlardan hangisinin tutulacağını belirtir. 'first' (varsayılan) ilk tekrar eden satırı, 'last' son tekrar eden satırı tutar.inplace
: Değişikliklerin orijinal DataFrame üzerinde yapılıp yapılmayacağını belirtir. Varsayılan değeri False'dur.ignore_index
: Yeniden dizinleme yapılıp yapılmayacağını belirtir. Varsayılan değeri False'dur.
import pandas as pd
# Örnek bir veri çerçevesi oluşturalım
data = {'A': [1, 2, 2, 3, 4],
'B': ['a', 'b', 'b', 'c', 'c']}
örnekveri = pd.DataFrame(data)
# Tekrar eden satırları kaldırma
unique_df = örnekveri.drop_duplicates()
print(unique_df)
A B
0 1 a
1 2 b
3 3 c
4 4 c
unique()
ve nunique()
metotları, belirli bir sütunda veya veri çerçevesindeki benzersiz değerleri ve bu değerlerin sayısını bulmak için kullanılabilir.
Kullanımı
Series.unique()
Series.nunique(dropna=True)
dropna
: NaN değerlerin dahil edilip edilmeyeceğini belirtir. Varsayılan değeri True'dur.
import pandas as pd
# Örnek bir veri çerçevesi oluşturalım
data = {'A': [1, 2, 2, 3, 4],
'B': ['a', 'b', 'b', 'c', 'c']}
örnekveri = pd.DataFrame(data)
# 'A' sütunundaki benzersiz değerler
unique_values = örnekveri['A'].unique()
print("Benzersiz Değerler:", unique_values)
# 'B' sütunundaki benzersiz değerlerin sayısı
num_unique_values = örnekveri['B'].nunique()
print("Benzersiz Değerlerin Sayısı:", num_unique_values)
Benzersiz Değerler: [1 2 3 4]
Benzersiz Değerlerin Sayısı: 3
Zaman serisi verileri, zamanla değişen bir veya birden fazla değişkenin düzenli aralıklarla ölçüldüğü veri türüdür. Genellikle zaman serileri, zamana göre düzenlenmiş bir gözlem dizisi şeklinde temsil edilir ve veri analizinde zaman boyunca değişen desenleri, trendleri ve ilişkileri analiz etmek için kullanılır.
Zaman serisi verileri genellikle aşağıdaki özelliklere sahiptir:
-
Zaman bileşeni: Veriler, belirli bir zaman aralığında toplanmış veya ölçülmüş olmalıdır. Örneğin, saatlik, günlük, aylık veya yıllık zaman aralıklarında olabilir.
-
Zaman sırası: Gözlemler, zaman sırasına göre düzenlenmiştir. Yani, bir gözlem bir sonraki gözlemden önce veya sonra gerçekleşmiştir.
-
Zamana bağlı değişkenlik: Zaman serisi verilerinde, zamanla değişen bir veya daha fazla değişken bulunur. Bu değişkenler genellikle belirli bir olayın veya koşulun zaman içinde nasıl değiştiğini gösterir.
Zaman serisi verileri, birçok farklı alanda yaygın olarak kullanılır. Örneğin:
-
Ekonomi ve finans: Hisse senedi fiyatları, döviz kurları, enflasyon oranları gibi ekonomik verilerin zaman serisi analizi.
-
Hava durumu: Sıcaklık, nem, rüzgar hızı gibi meteorolojik verilerin zaman serisi analizi.
-
Üretim ve endüstri: Üretim miktarları, tüketim eğilimleri gibi endüstriyel verilerin zaman serisi analizi.
-
Sağlık: Hastalık yayılımı, ilaç etkileri gibi sağlık verilerinin zaman serisi analizi.
Zaman serisi verilerinin analizi, gelecekteki trendleri tahmin etmek, geçmiş performansı değerlendirmek, anormallikleri tespit etmek ve karar alma süreçlerini desteklemek için önemlidir. Bu nedenle, zaman serisi verileri, istatistiksel ve makine öğrenimi tekniklerinin kullanıldığı birçok analiz ve modelleme yöntemine konu olmuştur.
from datetime import datetime
# Tarih ve saat oluşturma
dt = datetime(2023, 12, 31, 23, 59, 59)
print(dt)
2023-12-31 23:59:59
- Yukarıdaki örnekte, 31 Aralık 2023 tarihini ve 23:59:59 saatini temsil eden bir
datetime
nesnesi oluşturulmuştur.
Tarih ve saat veri türleri, zaman serisi verilerinin temel yapı taşlarıdır. Python'da, tarih ve saat verilerini temsil etmek için datetime modülü kullanılır. Bu modül, datetime ve timedelta gibi birçok sınıfı içerir ve tarihleri oluşturmak, manipüle etmek ve aritmetik işlemler yapmak için kullanılır.
datetime
sınıfı, tarih ve saati temsil etmek için kullanılır. Tarih ve saat bilgileri, yıl, ay, gün, saat, dakika, saniye ve milisaniye cinsinden saklanabilir.
from datetime import datetime
# Tarih ve saat oluşturma
dt = datetime(2023, 12, 31, 23, 59, 59)
print(dt)
2023-12-31 23:59:59
- Yukarıdaki örnekte, 31 Aralık 2023 tarihini ve 23:59:59 saatini temsil eden bir datetime nesnesi oluşturulmuştur.
timedelta
sınıfı, iki tarih arasındaki zaman farkını temsil etmek için kullanılır. Bu fark, gün, saat, dakika, saniye ve milisaniye cinsinden ifade edilebilir.
from datetime import timedelta
# Zaman farkı oluşturma
diff = timedelta(days=5, hours=3, minutes=30)
print(diff)
5 days, 3:30:00
- Yukarıdaki örnekte, 5 gün 3 saat 30 dakika sürecek bir
timedelta
nesnesi oluşturulmuştur.
strftime()
metodu, bir datetime
nesnesini belirli bir biçimde biçimlendirmek için kullanılırken, strptime()
metodu ise bir tarih ve saat dizesini bir datetime
nesnesine dönüştürmek için kullanılır.
from datetime import datetime
# Tarih ve saat dönüşümü
dt_str = "2023-12-31 23:59:59"
dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
print(dt)
# Tarih ve saat biçimlendirme
dt_formatted = dt.strftime("%d/%m/%Y %I:%M %p")
print(dt_formatted)
2023-12-31 23:59:59
31/12/2023 11:59 PM
- Yukarıdaki örnekte, bir tarih ve saat dizesi bir
datetime
nesnesine dönüştürülmüş ve ardından biçimlendirilmiştir.
Zaman serisi verileri, zamanla değişen bir veya birden fazla değişkenin düzenli aralıklarla ölçüldüğü veri türüdür. Python'da, zaman serisi verilerini oluşturmak için birkaç farklı yöntem bulunmaktadır. Bu yöntemlerden bazıları şunlardır:
Zaman serisi verilerini manuel olarak oluşturmak için datetime
modülünden yararlanabiliriz. Bu yöntemde, belirli bir zaman aralığı boyunca düzenli aralıklarla ölçümler yaparak zaman serisini oluştururuz.
from datetime import datetime, timedelta
# Başlangıç tarihi
start_date = datetime(2022, 1, 1)
# Zaman serisini oluşturma
time_series = []
for i in range(10):
time_series.append(start_date + timedelta(days=i))
print(time_series)
[datetime.datetime(2022, 1, 1, 0, 0), datetime.datetime(2022, 1, 2, 0, 0), datetime.datetime(2022, 1, 3, 0, 0), datetime.datetime(2022, 1, 4, 0, 0), datetime.datetime(2022, 1, 5, 0, 0), datetime.datetime(2022, 1, 6, 0, 0), datetime.datetime(2022, 1, 7, 0, 0), datetime.datetime(2022, 1, 8, 0, 0), datetime.datetime(2022, 1, 9, 0, 0), datetime.datetime(2022, 1, 10, 0, 0)]
- Yukarıdaki örnekte, başlangıç tarihinden itibaren 10 gün boyunca her günün tarihini içeren bir zaman serisi oluşturulmuştur.
Pandas kütüphanesi, zaman serisi verilerini oluşturmak için kullanışlı bir araçtır. pd.date_range()
fonksiyonu, belirli bir tarih aralığında veya frekansta zaman serisi oluşturmak için kullanılabilir.
- Örneğin, bir zaman serisi oluşturmak için 2024 yılının Ocak ayındaki günlerin bir listesini kullanalım:
import pandas as pd
# Zaman serisini oluşturma
time_series = pd.date_range(start='2024-01-01', end='2024-01-31', freq='D')
print(time_series)
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
'2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08',
'2024-01-09', '2024-01-10', '2024-01-11', '2024-01-12',
'2024-01-13', '2024-01-14', '2024-01-15', '2024-01-16',
'2024-01-17', '2024-01-18', '2024-01-19', '2024-01-20',
'2024-01-21', '2024-01-22', '2024-01-23', '2024-01-24',
'2024-01-25', '2024-01-26', '2024-01-27', '2024-01-28',
'2024-01-29', '2024-01-30', '2024-01-31'],
dtype='datetime64[ns]', freq='D')
- Burada, start parametresi başlangıç tarihini, end parametresi bitiş tarihini, ve freq parametresi tarihler arasındaki adımı belirtir. D frekansı günlük olarak adım atılacağını belirtir.
NumPy kütüphanesi de zaman serisi verilerini oluşturmak için kullanılabilir. np.arange()
veya np.linspace()
gibi fonksiyonlarla belirli bir aralıkta veya belirli adımlarla zaman serisi oluşturulabilir.
tarihler = np.arange('2024-01-01', '2024-01-11', dtype='datetime64[D]')
tarihler
array(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
'2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08',
'2024-01-09', '2024-01-10'], dtype='datetime64[D]')
- Burada,
'2024-01-01'
başlangıç tarihi,2024-01-11
ise bitiş tarihidir.dtype='datetime64[D]'
ifadesi, tarihlerin günlük olarak depolanacağını belirtir.