Kurum_Türü_2 başlığını düzenleme

Merhaba Arkadaşlar;

Daha önce Kurum Bilgilerini Güncelle başlığıyla açtığım konuyla alakalı bazı yapamadığım konularda yardımlarınızı bekliyorum.

Yapmak istediğim;

Ana_Tabloda, eğer Kurum_Türü_1 başlığında Anadolu Lisesi var ise ve (“Çok Programlı”,“Meslek”,“İmam Hatip Lisesi”) ibareleri geçmiyorsa Kurum_Türü_2 başlığına Anadolu Lisesi yazsın,

Eğer Kurum_Türü_1 başlığında İmam Hatip Lisesi var ise ve KURUM_KODU1 başlığı boş ise, Kurum_Türü_2 başlığına İmam Hatip Ortaokulu (Bünyede) yazsın,

Eğer Kurum_Türü_1 başlığında Özel Yurt var ise ve Kurum_Adı başlığında ORTAÖĞRETİM yazıyorsa Kurum_Türü_2 başlığına 'Özel Yurt (ORTAÖĞRETİM)’ yazsın,

Eğer Kurum_Türü_1 başlığında Özel Yurt var ise ve Kurum_Adı başlığında ORTAOKUL yazıyorsa Kurum_Türü_2 başlığına 'Özel Yurt (ORTAOKUL)’ yazsın,

değilse:
Kurum_Türü_2 başlığına, Kurum_Türü_1 de ne ise onu yazsın

import pandas as pd

df_ana = pd.read_excel("Ana_Tablo.xlsx")

def kurum_turu(turu):
  if ("Anadolu Lisesi" in turu)or("Özel Anadolu Lisesi" in turu)and("Çok Programlı","Meslek","İmam Hatip Lisesi"in not turu): return "Anadolu Lisesi"   
  
  elif ("Özel Yurt" in turu) and ('ORTAÖĞRETİM' in turu):return "Özel Yurt (ORTAÖĞRETİM)"
  elif ("Özel Yurt" in turu) and ('ORTAOKUL'in turu):return "Özel Yurt (ORTAOKUL)"
    
df_ana["KURUM_TÜRÜ_2"] = df_ana["KURUM_TÜRÜ_1"].apply(kurum_turu)
df_ana["KURUM_TÜRÜ_2"] = df_ana["KURUM-ADI"].apply(kurum_turu)
  
else:  
df_ana["KURUM_TÜRÜ_2"] = df_ana["KURUM_TÜRÜ_1"]
     
![Ana_Tablo|690x216](upload://ydvXtsC36JtyjBruQ9AKJrNz7CK.png)

Print(df_ana)

Merhaba,
Aşağıdaki kodu dener misin?

# encoding:utf-8

import pandas as pd
df_ana = pd.read_excel("Ana_Tablo_2.ods")
print("DF_ANA_KURUM:\n", df_ana)

for indeks in df_ana.index:
    kurum_turu_1 = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]

    if  ("Anadolu Lisesi" in kurum_turu_1) and "Çok Programlı" not in kurum_turu_1 and "Meslek" not in kurum_turu_1 and "İmam Hatip Lisesi" not in kurum_turu_1:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Anadolu Lisesi"

    elif "İmam Hatip Lisesi" in kurum_turu_1 and pd.isnull(df_ana.loc[indeks, "KURUM_KODU1"]):
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "İmam Hatip Ortaokulu (Bünyede)"
    
    elif "Özel Yurt" in kurum_turu_1 and "ORTAÖĞRETİM" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAÖĞRETİM)"

    elif "Özel Yurt" in kurum_turu_1 and "ORTAOKUL" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAOKUL)"

    else:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]
    
print(df_ana)

Çıktı:

KURUM_KODU  KURUM_KODU1   Tipi     İLÇE                  KURUM_TÜRÜ_1                    KURUM_TÜRÜ_2                                      KURUM_ADI EĞİTİM_KADEMESİ  SAYISI  DURUMU
0            4          4.0  RESMİ  SALİHLİ          Fatih Anadolu Lisesi                  Anadolu Lisesi                         Salihli Anadolu Lisesi     ORTAÖĞRETİM       1     NaN
1            2          NaN  RESMİ  OSMANLI             İmam Hatip Lisesi  İmam Hatip Ortaokulu (Bünyede)          Osmanlı Kız Anadolu İmam Hatip Lisesi        ORTAOKUL       1     NaN
2            6          6.0  RESMİ  SALİHLİ                 MHG Özel Yurt         Özel Yurt (ORTAÖĞRETİM)                                    ORTAÖĞRETİM         İLKOKUL       1     NaN
3            2          2.0  RESMİ  OSMANLI   İmam Hatip Lisesi Özel Yurt            Özel Yurt (ORTAOKUL)                               Osmanlı ORTAOKUL     ORTAÖĞRETİM       1     NaN
4            1          1.0  RESMİ  SALİHLİ     Anadolu İmam Hatip Lisesi       Anadolu İmam Hatip Lisesi      ÖZEL OSMANLI ORTAOKUL ERKEK ÖĞRENCİ YURDU     ORTAÖĞRETİM       1     NaN
5            3          3.0  RESMİ  SALİHLİ       Anadolu Meslek Programı         Anadolu Meslek Programı               Mesleki ve Teknik Anadolu Lisesi     ORTAÖĞRETİM       1     NaN
6            5          5.0  RESMİ  SALİHLİ                       İlkokul                         İlkokul  ÖZEL DEREBAŞI ORTAÖĞRETİM ERKEK ÖĞRENCİ YURDU         İLKOKUL       1     NaN
7            7          7.0  RESMİ   SARICA   Çok Programlı Meslek Lisesi     Çok Programlı Meslek Lisesi                              Atatürk Ortaokulu        ORTAOKUL       1     NaN
8            8          8.0  RESMİ   SARICA       Anadolu Meslek Programı         Anadolu Meslek Programı                               Atatürk İlkokulu         İLKOKUL       1     NaN
9            9          9.0  RESMİ   SARICA                       İlkokul                         İlkokul                                Sarıca İlkokulu         İLKOKUL       1     NaN
10          11         11.0  RESMİ  SALİHLİ     Anadolu İmam Hatip Lisesi       Anadolu İmam Hatip Lisesi                      Anadolu İmam Hatip Lisesi     ORTAÖĞRETİM       1     NaN
11          55         55.0  RESMİ  SALİHLİ                       İlkokul                         İlkokul                           Selam Verdi İlkokulu         İLKOKUL       1     NaN
12          56         56.0  RESMİ  SALİHLİ  Çok Programlı Anadolu Lisesi    Çok Programlı Anadolu Lisesi                                 Hisar İlkokulu         İLKOKUL       1     NaN
1 Beğeni

Hocam Merhaba;

TypeError: argument of type ‘float’ is not iterable hatası veriyor.

Veri çerçevesini oluşturup sütun bilgilerine print(df_ana.dtypes) kodu ile baktığımızda aşağıdaki çıktı ile karşılaşıyoruz;

KURUM_KODU           int64
KURUM_KODU1        float64
Tipi                object
İLÇE                object
KURUM_TÜRÜ_1        object
KURUM_TÜRÜ_2       float64
KURUM_ADI           object
EĞİTİM_KADEMESİ     object
SAYISI               int64
DURUMU             float64

Veri çerçevesi oluşturduğumuz ilk anda “KURUM_TÜRÜ_2” sütununda veri bulunmadığı (hücreler boş olduğu) için sütun biçimi float64 yani ondalıklık sayı şeklinde belirlenmiş. Bu sütuna string / object (karakter grubu) verisi atamaya çalıştığımızda sorun yaşıyoruz sanırım.
Ancak ben Linux İşleim sisteminde benzer bir uyarı almama rağmen, yukarıdaki kod ile doğru sonucu elde ettim.

KURUM_TÜRÜ_2” sütununu string / object türüne çevirmeye çalışalım.

df_ana veri çerçevesini oluşturduktan sonra aşağıdaki kodu çalıştırıp çıktıya bakalım;

df_ana["KURUM_TÜRÜ_2"] = df_ana["KURUM_TÜRÜ_2"].astype(str)
print("df_ana.dtypes)

Çıktı;

KURUM_KODU           int64
KURUM_KODU1        float64
Tipi                object
İLÇE                object
KURUM_TÜRÜ_1        object
KURUM_TÜRÜ_2        object
KURUM_ADI           object
EĞİTİM_KADEMESİ     object
SAYISI               int64
DURUMU             float64
dtype: object

Şimdi geri kalan kodu çalıştırın. Tüm kod;

# encoding:utf-8

import pandas as pd
df_ana = pd.read_excel("Ana_Tablo_2.ods")
df_ana["KURUM_TÜRÜ_2"] = df_ana["KURUM_TÜRÜ_2"].astype(str)

for indeks in df_ana.index:
    kurum_turu_1 = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]

    if  ("Anadolu Lisesi" in kurum_turu_1) and "Çok Programlı" not in kurum_turu_1 and "Meslek" not in kurum_turu_1 and "İmam Hatip Lisesi" not in kurum_turu_1:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Anadolu Lisesi"

    elif "İmam Hatip Lisesi" in kurum_turu_1 and pd.isnull(df_ana.loc[indeks, "KURUM_KODU1"]):
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "İmam Hatip Ortaokulu (Bünyede)"
    
    elif "Özel Yurt" in kurum_turu_1 and "ORTAÖĞRETİM" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAÖĞRETİM)"

    elif "Özel Yurt" in kurum_turu_1 and "ORTAOKUL" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAOKUL)"

    else:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]
    
print("DF_ANA_KURUM NİHAİ:\n", df_ana)
1 Beğeni

Hocam Merhaba;
Bu hatayı alıyorum

if (“Anadolu” in kurum_turu_1) and ((“Çok Programlı” not in kurum_turu_1) and (“Meslek” not in kurum_turu_1) and (“İmam Hatip Lisesi” not in kurum_turu_1)):
^^^^^^^^^^^^^^^^^^^^^^^
TypeError: argument of type ‘float’ is not iterable
PS D:\PYTHON_DATA>

Veri çerçevesini oluşturup sütun bilgilerine print(df_ana.dtypes) kodu ile baktığında hangi çıktıyı alıyorsun?

Veri çerçevesini oluşturduktan sonra aşağıdaki kod ile tüm sütunların biçimini object olarak değiştirip kodu dener misin?

for basik in df_ana.columns:
    df_ana[basik] = df_ana[basik].astype(str)

Çıktı;

KURUM_KODU         object
KURUM_KODU1        object
Tipi               object
İLÇE               object
KURUM_TÜRÜ_1       object
KURUM_TÜRÜ_2       object
KURUM_ADI          object
EĞİTİM_KADEMESİ    object
SAYISI             object
DURUMU             object
dtype: object

Kodun tamamı;

# encoding:utf-8

import pandas as pd
df_ana = pd.read_excel("Ana_Tablo_2.ods")

for basik in df_ana.columns:
    df_ana[basik] = df_ana[basik].astype(str)

for indeks in df_ana.index:
    kurum_turu_1 = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]

    if  ("Anadolu Lisesi" in kurum_turu_1) and "Çok Programlı" not in kurum_turu_1 and "Meslek" not in kurum_turu_1 and "İmam Hatip Lisesi" not in kurum_turu_1:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Anadolu Lisesi"

    elif "İmam Hatip Lisesi" in kurum_turu_1 and pd.isnull(df_ana.loc[indeks, "KURUM_KODU1"]):
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "İmam Hatip Ortaokulu (Bünyede)"
    
    elif "Özel Yurt" in kurum_turu_1 and "ORTAÖĞRETİM" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAÖĞRETİM)"

    elif "Özel Yurt" in kurum_turu_1 and "ORTAOKUL" in df_ana.loc[indeks, "KURUM_ADI"]:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Özel Yurt (ORTAOKUL)"

    else:
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]
    
print("DF_ANA_KURUM NİHAİ:\n", df_ana)

1 Beğeni

Hocam Merhaba;

Kusura bakmayın, sandıkta görevli olmam nedeniyle geri dönüş saylayamadım.
Bu şekilde Kurum Türü başlığını düzenleyebiliyorum. Teşekkür ederim.
Hocam bu kodu büyük küçük harfe duyarsız hale getirebilir miyiz.

Birde daha önce Eğitim Durumu başlığını düzenlerken astype hatasını almamıştık. Bunun nedenini anla yayamadım.

Merhaba ,
Estağfurullah, kusur ne demek.

Büyük küçük harf duyarsızlığı ile alakalı olarak aklıma şöyle bir çözüm geldi ancak kesin olarak doğru sonuç vereceğini garanti edemem. Sebebi, string metotlarından .lower() , .upper(), …vb metotlar ile kelimeler üzerinde işlem yaptığımızda Türkçe karakterler (örneğin İ, ı, ) doğru olarak çevrilemiyor.

aşağıdaki kod mantığını kodun tamamına uyarlayabilirsin.

for indeks in df_ana.index:
    kurum_turu_1 = df_ana.loc[indeks, "KURUM_TÜRÜ_1"]
    if  ("anadolu lisesi" in str(kurum_turu_1).lower()):
        df_ana.loc[indeks, "KURUM_TÜRÜ_2"] = "Anadolu Lisesi"

Aşağıdaki açıklamayı ve öncesini / sonrasını kaynağından okuyabilirisiniz.

Buradaki problem ‘İ’ harfinden kaynaklanıyor. Python programlama dili bu harfi Türkçeye uygun bir şekilde küçültemediği için yukarıdaki hatayı alıyoruz. Yukarıdaki hatanın tam olarak ne anlama geldiğini birkaç bölüm sonra anlayacaksınız. Biz şimdilik sadece Python’ın ‘İ’ harfini Türkçeye uygun olarak küçültemediğini bilelim yeter.

Bir de şu örneğe bakalım:

il = "ADIYAMAN"
print(il.lower())
adiyaman

Gördüğünüz gibi, Python programlama dili ‘I’ harfini de düzgün küçültemiyor. ‘I’ harfinin küçük biçimi ‘ı’ olması gerekirken, bu metot ‘I’ harfini ‘i’ diye küçültüyor. Yani:

"I".lower()
'i'

Peki bu durumda ne yapacağız? Elimiz kolumuz bağlı oturacak mıyız? Elbette hayır! Biz bu tür küçük sorunları aşabilecek kadar Python bilgisine sahibiz. ‘İ’ ve ‘I’ harfleri ile ilgili problemi, yalnızca mevcut bilgilerimizi kullanarak rahatlıkla çözebiliriz:

iller = "ISPARTA, ADIYAMAN, DİYARBAKIR, AYDIN, BALIKESİR, AĞRI"
iller = iller.replace("I", "ı").replace("İ", "i").lower()
print(iller)

Bu kodlarla yaptığımız şey çok basit:

  • İlk replace() metoduyla karakter dizisi içinde geçen bütün ‘I’ harflerini, ‘ı’ ile değiştiriyoruz.
  • İkinci replace() metoduyla karakter dizisi içinde geçen bütün ‘İ’ harflerini ‘i’ ile değiştiriyoruz.
  • Bu iki işlemin ardından karakter dizisi içinde geçen ‘I’ ve ‘İ’ harflerini küçültmüş olduk. Ancak öteki harfler henüz küçülmedi. O yüzden de karakter dizimiz üzerine bir de lower() metodunu uyguluyoruz. Böylece bütün harfler düzgün bir şekilde küçülmüş oluyor.
  • Bu kodlarda farklı metotları uç uca nasıl eklediğimize dikkat edin.

Bu örnek size şunu göstermiş olmalı: Aslında programlama dediğimiz şey gerçekten de çok basit parçaların uygun bir şekilde birleştirilmesinden ibaret. Tıpkı bir yap-bozun parçalarını birleştirmek gibi…

Ayrıca bu örnek sizi bir gerçekle daha tanıştırıyor: Gördüğünüz gibi, artık Python’da o kadar ilerlediniz ki Python’ın problemlerini tespit edip bu problemlere çözüm dahi üretebiliyorsunuz!

Kaynak: Karakter Dizilerinin Metotları — Yazbel Python Belgeleri

Eğitim Durumu başlığını düzenlerken astype hatasını almamıştık. Bunun nedenini anlayayamadım.

Bunu ben de anlayamadım :slight_smile:

1 Beğeni

Hocam, Teşekkür ederim. Elinize emeğinize sağlık.

Hocam , araştırdım ama bir sonuca ulaşamadım.
Pandas ile sütunları, sayfayı biçimlendire biliyor muyuz, eğer yok ise openpyxl ile sütun genişliklerini nasıl ayarlayabiliriz. Örneğin, otomatik süun ve satır gerişliği gibi.

Pandas ile satırları, sütunları, sayfayı biçimlendireyi bilmiyorum. Sanırım biçimlendirme için openpyxl uygun bir modül / kütüphane.

Hocam, çok Teşekkür ederim.