Python Alıştırması: Excel Verilerini Kullanma | merhaba çevrimiçi

Saberie

Active member
Excel'e program tarafından erişim birçok uygulama alanı için ilgi çekicidir. Bu nedenle Python'un bu amaç için kütüphaneler sağlaması şaşırtıcı değildir. Pandaların yanı sıra, pandaların da bazı kısımlarında openpyxl kullanmasına rağmen, openpyxl'den de bahsetmeye değer. Her iki kitaplık da .xlsm makro dosya türü dahil tüm Excel formatlarını destekler. Satış 2023 çalışma sayfasını içeren bir Excel Demo.xlsx çalışma kitabı, aşağıdaki kod örneklerinin temelini oluşturur. Tablo, her biri beş satır ve sütunla kasıtlı olarak basit tutulmuştur, ancak elbette aşağıdaki örnekler başka herhangi bir Excel çalışma kitabıyla da çoğaltılabilir; Elektronik tablonun boyutu önemli değil.

Duyuru







(Resim:

Walter Saumweber

)



Walter Saumweber geliştirici, danışman ve öğretmen olarak uzun yıllara dayanan deneyime sahiptir. Çok sayıda uzman kitabının ve özel BT dergilerinde yayınlanan makalelerin yazarıdır. Ana faaliyet alanları iş çözümlerinin istemci-sunucu ortamlarında uygulanmasıdır.







İndirilecek örnek dosyalar

Pandaları yükle


Pandas kütüphanesi standart Python paketine dahil değildir ve konsoldan şu komutla erişilebilir: pip3 install pandas Python 3'ü yeniden yüklemek için. PyCharm IDE, kitaplıkların kurulumunu özellikle kolaylaştırır. Bir kitaplığın eksik olup olmadığını algılar ve otomatik olarak yüklemeyi önerir. Bunu yapmak için, kütüphane zaten mevcutmuş gibi editöre import komutunu yazın. Farenizi kırmızı daire içine alınmış adın üzerine getirdiğinizde, yükleme komutunu içeren bir açılır pencere görünür.

Pandas kütüphanesi ise pandas kurulumunun genellikle otomatik olarak içerdiği NumPy ve openpyxl kütüphanelerini kullanır. Ancak bundan emin olmalı ve gerekirse yeniden yüklemelisiniz.




Excel örneği



Kod örneklerinde atıfta bulunulan Excel elektronik tablosu, bir şirketin dört farklı bölgeye ayrılmış üç aylık satışlarını göstermektedir (Şekil 1).


(Fotoğraf: Walter Saumweber)



Verileri bir Excel elektronik tablosundan içe aktarma


Bir Excel elektronik tablosundan veri okumak, verileri içe aktardıktan sonra Pandalar işlevini kullanarak rahatlıkla yapılabilir. read_excel(). İlk parametre, muhtemelen bir yol da dahil olmak üzere, okunacak Excel dosyasının adıdır. Varsayılan olarak, ek parametreler olmadan şunu okur: read_excel() İlk çalışma sayfasındaki tüm verileri girin.


import pandas
data_frame = pandas.read_excel('Demo.xlsx')


İşlev, okunan Excel verilerini bir DataFrame'e (sınıf pandas.core.frame.DataFrame), iki boyutlu, neredeyse bir Excel çalışma sayfası gibi. Yani, örneğin şunları içerir: data_frame['I. Quartal'][0] I. Sütunun ilk hücresinin değeri. Çeyrek. Demo.xlsx çalışma sayfasında bu, Bölge A'nın ilk çeyrekteki satışlarıdır (B2 hücresi).

Veri yapısına genel bir bakış elde etmek için şunları kullanabilirsiniz: print(data_frame) DataFrame'in tamamını üretin veya print(data_frame['<Spaltenname>']) örneğin yalnızca bir sütundaki veriler print(data_frame['I. Quartal']). Örneğin sütun adlarının altında 0 ile başlayan satır indekslerinin de çıktısı alınır. Ancak sütunlara her zaman adlarıyla, yani bir dize belirtilerek başvurulmalıdır. Bir sütun mevcut değilse KeyError oluşur. Excel elektronik tablosundaki bir sütunun yeniden adlandırılması durumunda istisna yönetimi mantıklıdır:


try:
print(data_frame['I. Quartal'])
except KeyError:
print('Die Spalte existiert nicht')


Varsayılan olarak işlev yorumlar read_excel() Excel elektronik tablosunun ilk satırındaki veriler sütun başlıkları olarak. Bu satırdaki boş hücreler için DataFrame değeri saklar Unnamed: <Index>örnek tablodaki ilk hücre için değer Unnamed: 0. data_frame['Unnamed: 0'][<Index>] bu tablonun satır başlıklarını ifade eder – ile data_frame['Unnamed: 0'][2] Örneğin, bunu alırsınız Bezirk C.




Paket listesi



pip3 list console komutu, sistemde yüklü olan tüm Python kitaplıklarını listeler; -v parametresi ayrıca depolama konumlarını da gösterir (Şekil 2).


(Fotoğraf: Walter Saumweber)



Bir Excel hücresinin boş olup olmadığını kontrol edin


Boş basit veri hücreleri DataFrame'e dahil edilir nan (“sayı değil” için) (ancak bilinen çıktıda görünür) NaN). Bu nedenle geliştiriciler Python kodunda boş bir dizeyi kontrol ederken doğru sonuçlar alamazlar. Örneğin, if koşulu şu şekildedir: if data_frame['I. Quartal'][1] == '' oluşturulan DataFrame'i kullanarak ilk çeyrek sütununun ikinci hücresini kontrol etmek için uygun değildir. Ama aynı zamanda karşılaştırmalar 'nan' VEYA nan hedefe götürmeyin.

Bu sorunun birkaç çözümü var. Bir yandan Pandas kütüphanesi boş hücreleri kontrol etme işlevini sunuyor isna mevcut. DataFrame'in hücreyi temsil eden kısmı buna iletilir. B3 hücresinin içeriğini kontrol etmek şöyle görünebilir:


if pandas.isna(data_frame['I. Quartal'][1]):
print('Die Zelle ist leer')


NumPy kütüphanesi işlevi aynı amaç için sağlar isnan(). Çağrı isna() işlevinden farklı değildir. Oldukça zarif bir seçenek daha var: geliştiriciler bundan yararlanıyor nan Kendisiyle doğrudan karşılaştırmanın yanlış döndürdüğü tek nesnedir.


if data_frame['I. Quartal'][1] != data_frame['I. Quartal'][1]:
print('Die Zelle ist leer')


read_excel() parametreleri


Standarda uymayan koşullar için fonksiyon şunları sağlar: read_excel() çeşitli parametreler mevcuttur. Parametre skiprows İlgili veri ilk satırda başlamadığında kullanılır. Yanan skiprows atanan değer, satır sayısını temsil eder read_excel() atlanmalıdır, örneğin:


data_frame = pandas.read_excel('Demo.xlsx', skiprows=3)


Parametre sheet_name örnek çalışma kitabındaki ikinci çalışma sayfasındaki aşağıdaki ifadeyle hangi çalışma sayfasının okunacağını belirler.


data_frame = pandas.read_excel('Demo.xlsx', sheet_name='Umsätze 2024')


Örneğin birden fazla e-tablo varsa, ad yerine dizini de kullanabilirsiniz:


tabellenblaetter = [0, 1]
data_frames = pandas.read_excel('Demo.xlsx', sheet_name=tabellenblaetter)


Bu durumda oluşturulan read_excel() her sayfa için bir DataFrame içeren bir sözlük. Anahtarlar çalışma sayfası dizinlerini veya çalışma sayfası adlarını oluşturur. Yukarıda oluşturulan DataFrame'ler aşağıdakilerle kullanılabilir: data_frames[0] VE data_frames[1] adres.Parametre header çalışma sayfasının ilk satırı değilse gerekli olan sütun başlıklarını içeren satırı belirtir. Bilgi header=2 örneğin satır başlıklarının çalışma sayfasının üçüncü satırında olduğu anlamına gelir. header=None o paylaşır read_excel() Excel tablosunun sütun başlıkları içermediğini. Bu noktalara bakılmaksızın names İstediğiniz sütun adlarını bir listeye atayın:


spalten = ['', 'I/24', 'II/24', 'III/24', 'IV/24']
data_frame = pandas.read_excel('Demo.xlsx', names=spalten)
print(data_frame)


Çıktı şuna benzer:


I/24 II/24 III/24 IV/24
0 Bezirk A 19500 13500 17700 28000
1 Bezirk B 18400 25100 13600 21500
2 Bezirk C 9700 20000 29000 18500
3 Bezirk D 15800 14900 17200 16000



Önemli olan şudur: read_excel() beklenen names– Başlık satırındaki boş hücreler için bile her sütun için tam olarak bir başlık listeler. Excel tablosundaki başlık satırı beş sütuna sahip olduğundan, names-List tam olarak beş öğe içerir, aksi takdirde bir ValueError meydana gelir (“Geçilen adların sayısı, dosyadaki başlık alanlarının sayısıyla eşleşmiyor”).

Ancak bu durumda ilk öğede olduğu gibi boş bir dize atamak mümkündür. Bu durumda, DataFrame aslında bu sütun için bir başlık içermez ve “Adsız:” metnini ve ardından sütun dizini içermez. read_excel() işlev, name parametresi olmadan çağrıldığında eksik sütun başlıklarını otomatik olarak atar.

Ancak tanımlanmış names Bu aynı zamanda başlığı olmayan sütunlar için de geçerlidir.


spalten = ['Verkaufsbezirke', 'I/24', 'II/24', 'III/24', 'IV/24']


Parametreleri birlikte kullanırken biraz dikkatli olmak gerekir skiprows, names VE header gereklidir çünkü birbirlerini etkilerler. Örneğin Excel tablosunun başlık satırı önemlidir skiprows-Eğer değer dahil değildir read_excel()-Aynı anda arayın names kullanılır ve birine skiprows-Değer örneğin 2 gösterge olacaktır header=0olmadan names, Excel tablosundaki başlık satırının ilk satır değil üçüncü satır olduğu anlamına gelir. Bu nedenle, geliştirme aşamasında sonucun beklentileri karşıladığından sürekli olarak emin olunması tavsiye edilir.

Parametre nrows kaç satır olduğunu belirler read_excel() DataFrame'de okur. Örneğin, kaydet read_excel() ile nrows=2 DataFrame'de iki veri satırı artı bir başlık satırı. için varsayılan değere skiprows (Yok veya 0), örnek tablonun ilk üç satırıdır (başlık satırı dahil). için bir değer ise skiprows belirtildiyse kaydet read_excel() karşılık gelen yerden başlayan çizgiler.

Parametre ile usecols Okunacak sütunlar sınırlı olabilir. Bunların mutlaka yan yana olması gerekmez, ancak geliştiriciler sütun adları veya dizinlerden oluşan bir liste atayabilir (ancak ikisinden yalnızca biri). İle bütünlüğünde names Bu parametre ile tanımlanan sütun adları belirtilmelidir.


spalten = ['Verkaufsbezirke', 'I/23', 'II/23', 'III/23', 'IV/23']
data_frame = pandas.read_excel('Demo.xlsx', names=spalten, usecols=['Verkaufsbezirke', 'II/23'])
print(data_frame)


Yukarıdaki listenin çıktısı şöyle:


Verkaufsbezirke II/23
0 Bezirk A 13500
1 Bezirk B 25100
2 Bezirk C 20000
3 Bezirk D 14900



Haberin Sonu
 
Üst