Zip ile listeleri birleştirme ve Dataframe ile Listeleme

Aşağıdaki gibi listelerim var. Aşağıdaki gibi çıktı almak istiyorum. Yardımcı olabilir misiniz. Kodlarım uzun olduğundan buraya atmadım. Aşağıdaki mantığı anlarsam kodumu düzenleyebilirim.

Baslik=["Sıra","İsim","Not"]
liste=[([1,2,3,4],["ali","veli","sena","cenk"],[150,47,210,66]),([1,2],["yunus","tahir"],[85,54])

Sıra İsim Not
1 ali 150
2 veli 47
3 sena 210
4 cenk 66

Sıra İsim Not
1 yunus 85
2 tahir 54

import numpy as np
import pandas as pd

columns = ["Sıra", "İsim", "Not"]
data = [
    ([1, 2, 3, 4], ["ali", "veli", "sena", "cenk"], [150, 47, 210, 66]),
    ([1, 2], ["yunus", "tahir"], [85, 54])]

for i in data:
    print(pd.DataFrame(data=np.transpose(i), columns=columns))

Bir listem daha var Zaman=[“Sabahcı”,“Öğlenci”] bunlarıda aşağıdaki gibi başlık olarak eklemek istiyorum. Mümkün mü
Sabahcı
Sıra İsim Not
1 ali 150
2 veli 47
3 sena 210
4 cenk 66

Oglenci
Sıra İsim Not
1 yunus 85
2 tahir 54

aynı kodu aşağıdaki scripte uyguladığımda hata alıyorum. Nedeni bulamadım.

import re
import requests
from bs4 import BeautifulSoup
import datetime
from itertools import islice
import pandas as pd
import numpy as np

x=datetime.datetime.now() #bugüne ait tarih bilgisini çekiyor.
tarih=datetime.datetime.strftime(x,"%d.%m.%Y")   #tarihi uygun formata çevirdik.
plakalar = []
url= "https://www.hipodromx.com/program.aspx?Tarih={}".format(tarih) #url adresimizin uzantısındaki tarihi bulunduğumuz güne çekiyor.
get= requests.get(url)
soup= BeautifulSoup(get.content, "lxml")
liste= []
kosu_1= []
sehir={"ADANA": 1, "ANKARA": 6, "ANTALYA": 7, "BURSA": 16, "DİYARBAKIR": 21, "ELAZIĞ": 23, "İSTANBUL": 34, "İZMİR": 35, "KOCAELİ": 41, "Ş.URFA": 63}

for i in range(0, 2):
    sehir_bilgisi= soup.find_all("tr", attrs={"id": "ctl00_ContentPlaceHolder1_KosuKartDet_ASPxPageControl1_grdProgram_DXDataRow{}_1".format(i)})
    for sehirler in sehir_bilgisi:
        gunluk_sehir_bilgisi = sehirler.find("td", attrs={"class": "dxgv"}).text #hipodrom bilgisini html yerine göre siteden çektik.
        liste.append(gunluk_sehir_bilgisi)
for k in liste:
            if k.split(" ")[0] in sehir.keys():
                plakalar.append(sehir[k.split(" ")[0]])
url2="https://www.hipodromx.com/ProgramTamEkran.aspx?Tarih={}%2000:00:00&Sehir={}".format(tarih, plakalar[0])
get= requests.get(url2)
soup= BeautifulSoup(get.content, "lxml")

kosudaki_atsayisi=[]
for i in range(0,14):
    if len(re.findall("grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell.+_2".format(i), str(soup)))==0:
        break
    kosudaki_atsayisi.append(len(re.findall("grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell.+_2".format(i), str(soup)))) #kosudaki at sayısı
AGF=[]
NO=[]
ATADI=[]
TAKI=[]
AYGIR_KISRAK=[]
KILO=[]
JOKEY=[]
ATSAHIBI_ANTRENOR=[]
START=[]
HANDIKAP_PUANI=[]
DERECE=[]
KOSMADIGI_GUN=[]
ORTALAMA_PUAN=[]
BASLIK=["AGF","ATADI","TAKI","AYGIR_KISRAK","KILO","JOKEY","ATSAHIBI/ANTRENOR","START","HANDIKAP_PUANI","DERECE","KOSMADIGI GUN","ORT.PUAN"]
for j in range(0,len(kosudaki_atsayisi)):
    for i in range(0, kosudaki_atsayisi[j]):
        agf = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_2".format(j, i)}).text
        AGF.append(agf.strip())
        no=soup.find("td", attrs={"id":"grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_2".format(j, i)}).next_sibling.text
        NO.append(int(no.strip()))
        atadi = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_4".format(j, i)}).find("a").text
        ATADI.append(atadi.strip())
        taki = soup.find("td",
                         attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_4".format(j, i)}).find_all(
            "b", text=True)
        taki_bul = []
        for b in taki:
            if b.get_text() == " " or b.get_text() == "KOŞMAZ":
                continue
            taki_bul.append(b.text)
        TAKI.append("".join(taki_bul))
        aygir = soup.find("td",
                          attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_6".format(j, i)}).text
        x = "".join(aygir.split())
        kisrak_kisrakbabasi = soup.find("td", attrs={
            "id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_7".format(j, i)}).text
        y = "".join(kisrak_kisrakbabasi.split())
        AYGIR_KISRAK.append("/".join((x, y)))
        kilo = soup.find("td", attrs={
            "id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_8".format(j, i)}).text.split()
        Kilo = []
        for x in kilo:
            Kilo.append(float(x.replace(",", ".")))
            toplam = 0
            for y in Kilo:
                toplam += y
        KILO.append(toplam)
        jokey = soup.find("td",
                          attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_9".format(j, i)}).text
        JOKEY.append(jokey.strip())
        at_sahibi = soup.find("td",
                              attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_10".format(j, i)}).text
        x = " ".join(at_sahibi.split())
        antrenor = soup.find("td",
                             attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_11".format(j, i)}).text
        y = " ".join(antrenor.split())
        ATSAHIBI_ANTRENOR.append("/".join((x, y)))
        start = soup.find("td",
                          attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_12".format(j, i)}).text
        START.append(int(start.strip()))
        handikap_puani = soup.find("td", attrs={
            "id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_12".format(j, i)}).next_sibling.text
        HANDIKAP_PUANI.append(handikap_puani.strip())
        derece = soup.find("td", attrs={
            "id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_14".format(j, i)}).find_all("td")
        for x in derece:
            DERECE.append(" ".join(x.text))
        kosmuyor = soup.find("td",
                             attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_15".format(j, i)}).text
        KOSMADIGI_GUN.append(kosmuyor.strip())
        ortalama_puan = soup.find("td", attrs={
            "id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_15".format(j, i)}).next_sibling.text
        ORTALAMA_PUAN.append(int(ortalama_puan.strip()))
Inputt=iter(AGF)
Inputt1=iter(NO)
Inputt2=iter(ATADI)
Inputt3=iter(TAKI)
Inputt4=iter(AYGIR_KISRAK)
Inputt5=iter(KILO)
Inputt6=iter(JOKEY)
Inputt7=iter(ATSAHIBI_ANTRENOR)
Inputt8=iter(START)
Inputt9=iter(HANDIKAP_PUANI)
Inputt10=iter(DERECE)
Inputt11=iter(KOSMADIGI_GUN)
Inputt12=iter(ORTALAMA_PUAN)
kosudaki_at_agfsi=[list(islice(Inputt, x)) for x in kosudaki_atsayisi]
kosudaki_at_numaralari=[list(islice(Inputt1, x)) for x in kosudaki_atsayisi]
kosudaki_at_adlari=[list(islice(Inputt2, x)) for x in kosudaki_atsayisi]
kosudaki_at_takilari=[list(islice(Inputt3, x)) for x in kosudaki_atsayisi]
kosudaki_at_aygir_kisrak=[list(islice(Inputt4, x)) for x in kosudaki_atsayisi]
kosudaki_at_kilolari=[list(islice(Inputt5, x)) for x in kosudaki_atsayisi]
kosudaki_at_jokeyleri=[list(islice(Inputt6, x)) for x in kosudaki_atsayisi]
kosudaki_at_atsahibi_antrenorleri=[list(islice(Inputt7, x)) for x in kosudaki_atsayisi]
kosudaki_at_startlari=[list(islice(Inputt8, x)) for x in kosudaki_atsayisi]
kosudaki_at_handikap_puanlari=[list(islice(Inputt9, x)) for x in kosudaki_atsayisi]
kosudaki_at_dereceleri=[list(islice(Inputt10, x)) for x in kosudaki_atsayisi]
kosudaki_at_kosmadigi_gun=[list(islice(Inputt11, x)) for x in kosudaki_atsayisi]
kosudaki_at_ortalama_puanlari=[list(islice(Inputt12, x)) for x in kosudaki_atsayisi]

kosular=list(zip(kosudaki_at_agfsi,kosudaki_at_numaralari, kosudaki_at_adlari,kosudaki_at_takilari,
kosudaki_at_aygir_kisrak,kosudaki_at_kilolari,kosudaki_at_jokeyleri,kosudaki_at_atsahibi_antrenorleri,
kosudaki_at_startlari,kosudaki_at_handikap_puanlari,kosudaki_at_dereceleri,kosudaki_at_kosmadigi_gun,
kosudaki_at_ortalama_puanlari))
for i in kosular:
    print(pd.DataFrame(data=np.transpose(i), columns=BASLIK))

Ne hatası alıyorsunuz?

ValueError: Shape of passed values is (9, 13), indices imply (9, 12)

indis sayısı uyuşmazlığı galiba

for i in kosular:
    print(len(np.transpose(i)), len(BASLIK))
10 12
16 12
12 12
6 12
11 12
17 12

transpose ettiğiniz bazı listelerin uzunlukları ile BASLIK'ın uzunluğu aynı değil. Kodlarınızı bir gözden geçirin.

1 Beğeni

Teşekkür ederim.Dediğiniz gibi başlık listesinde hata varmış. Yukarıda bir soru daha sormuştum her tabloya özel başlık ekleyebilir miyim

Evet, ekleyebilirsiniz.

Yol gösterebilir misiniz yapamadım.

Kodu sadeleştirip paylaşabilme imkanınız var mı?

bu tabloyu excele nasıl aktarabilirim to.excel ile denedim ama sadece ikinci verileri tabloya aktarıyor.

import numpy as np
import pandas as pd

title = [["Sabahci","",""], ["Oglenci","",""]]
baslik = ["No", "Name", "Point"]
datas = [([1, 2, 3, 4], ["ali", "veli", "sena", "cenk"], [150, 47, 210, 66]), ([1, 2], ["yunus", "tahir"], [85, 54])]

for i in range(0,len(datas)):
    df = pd.DataFrame(data=np.transpose(datas[i]), columns=[title[i], baslik])
    print(df)