Python ile excel işlemleri

merhabalar arkadaşlar:
bir biyoinformatik çalışmam var bu çalışmada 2 adet xlsx dosyam var bu dosyaların içerisinde genler, bu genlerin sebep olduğu hastalıklar ve bu genlerin kalıtım modelleri gibi verilerin olduğu dosyalardan oluşuyor. benim yapmaya çalıştığım şu A dosyasındaki bir sütünda yer alan gen bilgisini B dosyasında arayıp eşleştiği satırların verilerini C dosyasına yazdırmak istiyorum. bunun için openpyxl, csv kütüphanelerini inceledim fakat bi sonuç elde edemedim.
veri madenciliği konusunda yeni sayılırım. bu sorunu çözmem için bana yol gösterebilir misiniz?
teşekkürler

Merhaba, pandas modülü var onu kullanabilirsiniz. Gerçi excel dosyalarıyla işlemler yapmak istediğimde pandas yerine xlrd veya xlwt modüllerini kullanıyorum ama, pandas yaygın olarak kullanılıyor.

cevap için teşekkür ederim pandas kütüphanesini nasıl kullanabileceğime dair ufak bi örnek verebilir misiniz?

Dediğim gibi daha çok xlrd ve xlwt kullandım. pandas ile ilgili sadece bu forumdaki arkadaşlardan bir tanesinin sorduğu soru üzerine bir örnek yapmıştım, onu da aşağıda sizinle paylaşayım ama program çalışmayacaktır çünkü programda belirtilen yollarda artık o excel dosyaları yok.

import pandas as pd
import xlsxwriter
import numpy as np
import os


def dosyadan(kaynak, hedef):
    oku = pd.read_excel(kaynak, header=None)
    workbook = xlsxwriter.Workbook(hedef)
    worksheet = workbook.add_worksheet()
    satir = 0
    for i in range(len(oku.values)):
        sutun = 0
        for j in oku.values[0]:
            sec = pd.read_excel(kaynak, parse_cols="{0}:{0}".format(j), header=None)
            df = pd.DataFrame(sec, index=[satir])
            numpy_data = df.get_values()
            string_data = np.array2string(numpy_data).replace("[", "").replace("]", "").replace("'", "")
            worksheet.write(satir, sutun, string_data)
            sutun += 1
        satir += 1
    workbook.close()


def dizinden(kaynak_dizin, hedef_dizin):
    if not os.path.exists(hedef_dizin):
        os.mkdir(hedef_dizin)
    for i in os.listdir(kaynak_dizin):
        if i.endswith("xlsx") or i.endswith("xls"):
            kaynak_ = os.path.join(kaynak_dizin, i)
            hedef_ = os.path.join(hedef_dizin, i)
            dosyadan(kaynak_, hedef_)


def karsilastir(dizin1, dizin2, hedef):
    for i in os.listdir(dizin1):
        if i.endswith("xlsx") or i.endswith("xls"):
            dosya1 = os.path.join(dizin1, i)
            zaman1 = os.stat(dosya1).st_mtime
            for j in os.listdir(dizin2):
                if j.endswith("xlsx") or j.endswith("xls"):
                    dosya2 = os.path.join(dizin2, j)
                    zaman2 = os.stat(dosya2).st_mtime
                    if i == j:
                        if zaman1 > zaman2:
                            dosyadan(dosya1, os.path.join(hedef, i))
                        else:
                            dosyadan(dosya2, os.path.join(hedef, j))


if __name__ == "__main__":
    yol1 = "/home/tanberk/Projects/Exercises/yol1"
    yol2 = "/home/tanberk/Projects/Exercises/yol2"
    yol3 = "/home/tanberk/Masaüstü"
    karsilastir(yol1, yol2, yol3)

Bunun haricinde sizinle tutorial linki paylaşayım.

https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html#min
https://pandas.pydata.org/pandas-docs/stable/getting_started/tutorials.html

from openpyxl import *
def excel(deger,yol):
    yol=yol

    tek_eksenli = load_workbook(yol)
    sayfa = tek_eksenli.active
    max_satır_sayısı = sayfa.max_row
    max_sutun_sayısı = sayfa.max_column
    min_satır_sayısı = sayfa.min_row
    min_sutun_sayısı = sayfa.min_column
    matris_satır=[]
    matris_sutun=[]
    baslangıc=deger




    for satır in sayfa.iter_rows(min_row=min_satır_sayısı,min_col=(baslangıc-1),max_row=max_satır_sayısı,max_col=(baslangıc-1)):


        for hücre in satır :


            matris_satır.append(hücre.value)


    devam=input(" Listelerde Stringlerin Silinmesini İstiyorsanız 'a' ya İStemiyorsanız her hangi bir tuşa tıklayın  ")

    if devam == "a":
        for i in matris_satır:

            if type(i) == str :
                print(" Satırlar Arasında String Eleman olduğu İçin Silindi")
                matris_satır.remove(i)

    print(" Excell Verileri matris_satır Adlı Listeye Aktarıldı")
    return list(matris_satır)

def  excel2():
    yol=input("Dosya : ")

    import os
    if os.path.exists(yol):

        genel_matris=[]
        tek_eksenli = load_workbook(yol)
        sayfa = tek_eksenli.active
        max_sutun_sayısı = sayfa.max_column
        for i in range(2,max_sutun_sayısı+2):

            genel_matris.append(excel(i,yol))


        return genel_matris
    else :
        print("Böyle bir Dosya Yok ")

excel’den veri çekmek için bunu yazmıştım excelde ki her sütünu bir liste içerisine depoluyor.
daha sonra for dögüleri ile istediğiniz işlemi yapabilrsiniz .

kullanmak için excel dosyasının tam dizinini girmeniz gerekiyor.

C:\User… şeklinde

ben sayı verilerini çekiyordum sorunsuzca çalışıyordu umarım sizinde işinize yarar . :slight_smile:

sevgili @dildeolupbiten yazmış olduğunuz koda kendi dosyalarımı entegre edip çalıştırdım ancak herhangi bir çıktı vermiyor hata ya da sonuç olarak bir dosya oluşturmadı yaptığı işlemi nasıl görebilirim?

sevgili @erenahmet95 vermiş olduğun kod pek işime yarıcak bir şey değil gibi duruyor çünkü benim yapmam gereken dataların içerisinde integer değer yok belge sadece string değerlerden oluşuyor ancak içerisinden bazı bölümleri işime yarıcak sanırım teşekkür ederim.

@shigej38

Yazdığım kod şu başlık ile ilgiliydi, isterseniz başlığa bir göz atın.

Bunun için Python kullanmaya gerek var mı?
Excel, LibreOfis, WPS Ofis,…vb programların düşeyara (tablo verinize göre bazen yatayara) formüllerini kullanarak zaten bu işi kolayca gerçekleştirebilirsiniz.

Düşeyara Formülü (işlevi) için;

Daha fazla Ders için;
https://www.youtube.com/results?search_query=excel+düşeyaraömer+bağcı

Excel’de tekrar eden değerleri kaldırmak için;

2 excelde de tekrar eden veriler var ancak bunların tek bir sutunu kendini tekrar ediyor diğer sütünları tekrar etmiyor bunun için eşleşmeyi tek satırla değil birden çok satırda yapmalı yani benim verdiğim string ifadeyi diğer belge de tarayarak eşleşen hücrelerin tüm verilerini tek bir satıra yazması gerekiyor bunun için düşeyara yı kullanamıyorum

“Birleştir” İşlevi (fonksiyonunu) kullanarak, birden çok satırla eşleştirmek te mümkün aslında.
Örnek bir/iki dosya gönderebilirseniz, üzerinde çalışıp sonucu sizinle paylaşabilirim.

Yeni yeni pandas modülüyle ilgilenmeye başladım. Şu anlık sadece tek bir örnek yaptım, onu da sizine paylaşayım isterseniz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd


def dataframe(array: dict = {}, row_names: list = [], 
              col_names: list = []) -> pd.DataFrame:
    """
# EXAMPLE:
#
array = {
    "A": list(range(3)),
    "B": [i * 2 for i in range(2)],
    "C": [i * 3 for i in range(6)]
}
#
print(dataframe(array=array, 
                row_names=['ROW1', 'ROW2', 'ROW3', 'ROW4'],
                col_names=['COL1', 'COL2']))
print()
print(dataframe(array=array, 
                row_names=['COL1', 'COL2', 'COL3', 'COL4'],
                col_names=['ROW1', 'ROW2']).transpose())
#
# OUTPUT:
#
#       COL1  COL2     1
# ROW1   0.0   0.0   0.0
# ROW2   1.0   2.0   3.0
# ROW3   2.0   NaN   6.0
# ROW4   NaN   NaN   9.0
# 1      NaN   NaN  12.0
# 2      NaN   NaN  15.0
#
#       COL1  COL2  COL3  COL4     1     2
# ROW1   0.0   1.0   2.0   NaN   NaN   NaN
# ROW2   0.0   2.0   NaN   NaN   NaN   NaN
# 1      0.0   3.0   6.0   9.0  12.0  15.0
    """
    row = max(len(v) for k, v in array.items()) if array else 0
    col = len(array.keys())
    if len(row_names) > row:
        row_names = [i + 1 for i in range(row)]
    row_names.extend(i + 1 for i in range(row))
    for keys, values in array.items():
        if len(values) < row:
            array[keys] = values + \
                [np.NAN for _ in range(row - len(values))]
    if col_names:
        diff = len(array.items()) - len(col_names)
        col_names.extend([i + 1 for i in range(diff)])
        if diff < 0:
            col_names = array.keys()
    df = pd.DataFrame(
        np.array(list(array.values())).reshape(col, row)
    ).transpose()
    df.columns = col_names if col_names else array.keys()
    df.rename(index={i: j for i, j in enumerate(row_names)},
              inplace=True)
    return df
    
   
exec(dataframe.__doc__)