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 .
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.
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__)