muhammed_can
Hectopat
- Katılım
- 7 Nisan 2022
- Mesajlar
- 11
Daha fazla
- Cinsiyet
- Erkek
| grup adı | 1. Öğrenci | 1. Öğrenci No | 1. Öğrenci Tel | 2. Öğrenci | 2. Öğrenci No | 2. Öğrenci Tel |
| A Grubu | ali | 13131313 | 0531313131 | damla | 14141414 | 0531313112 |
| B Grubu | veli | 12121212 | 0531313113 |
| Grup | Öğrenci Adı | Öğrenci Tel | Öğrenci No |
| A Grubu | ali | 13131313 | 0531313131 |
| A Grubu | damla | 14141414 | 0531313112 |
| B Grubu | veli | 12121212 | 0531313113 |
python --version yazarak sürümü de kontrol edebilirsiniz.pip install streamlit pandas openpyxl xlsxwriter
import streamlit as st
import pandas as pd
import io
st.set_page_config(page_title="Geniş Tabloyu Uzun Tabloya Dönüştürücü", layout="wide")
st.title("Excel Tablo Dönüştürme Aracı (Unpivot)")
st.info("""
Bu araç, her satırda birden fazla öğrenci/kayıt bilgisi içeren geniş Excel tablolarını,
her satırda tek bir kayıt olacak şekilde uzun ve düzenli bir formata dönüştürür.
""")
uploaded_file = st.file_uploader(
"Lütfen dönüştürmek istediğiniz Excel (.xlsx) dosyasını buraya yükleyin",
type="xlsx"
)
if uploaded_file is not None:
try:
df_original = pd.read_excel(uploaded_file, dtype=str) # Tüm veriyi metin olarak oku, numara formatını koru
st.subheader("1. Orjinal Veri Önizlemesi")
st.dataframe(df_original.head())
st.subheader("2. Sabit Kalacak Sütun(ları) Seçin")
st.write("Bu sütunlar dönüştürme işleminden etkilenmeyecek ve her satırda tekrar edecektir. (Örn: 'grup adı')")
id_columns = st.multiselect(
"Sabit kalacak sütunları seçin:",
options=df_original.columns.tolist(),
default=df_original.columns.tolist()[0] if not df_original.columns.empty else None
)
if not id_columns:
st.warning("Lütfen sabit kalacak en az bir sütun seçin.")
else:
value_columns = [col for col in df_original.columns if col not in id_columns]
st.subheader("3. Tabloyu Dönüştür")
if st.button("Dönüştür ve Sonucu Göster"):
df_melted = pd.melt(
df_original,
id_vars=id_columns,
value_vars=value_columns,
var_name="Bilgi Türü",
value_name="Değer"
)
df_melted.dropna(subset=['Değer'], inplace=True)
df_melted = df_melted[df_melted['Değer'] != '']
# --- ADIM 2: BİLGİ AYRIŞTIRMA VE PIVOT ---
# <<< DEĞİŞİKLİK BURADA BAŞLIYOR >>>
# 'Bilgi Türü' sütununu 'Öğrenci Sırası' ve 'Özellik' olarak ikiye ayır.
# Örnek: "1. Öğrenci No" -> ["1.", "Öğrenci No"]
df_melted[['Öğrenci Sırası', 'Özellik']] = df_melted['Bilgi Türü'].str.split(n=1, expand=True)
# Artık "Bilgi Türü" sütununa ihtiyacımız yok, onu atabiliriz
df_melted = df_melted.drop(columns=['Bilgi Türü'])
# Pivot işlemi: Her öğrencinin bilgilerini tek satırda birleştir.
# İndeks olarak grup adı ve öğrenci sırasını kullan. 'Özellik' sütunundaki değerleri yeni sütun başlıkları yap.
df_final = df_melted.pivot(
index=id_columns + ['Öğrenci Sırası'],
columns='Özellik',
values='Değer'
).reset_index()
# Pivot işleminden sonra oluşan sütun adı indexini temizle
df_final.columns.name = None
# Gereksiz sütunları (Öğrenci Sırası gibi) kaldırabilir ve sütunları yeniden sıralayabiliriz.
# Orjinal tablodaki sütun başlıklarına benzemesi için düzenleme
desired_columns_order = [
'grup adı', '1. Öğrenci', '1. Öğrenci No', '1. Öğrenci Tel'
]
# Pivot sonucunda oluşan başlıkları ("Öğrenci", "Öğrenci No") alalım
final_columns = id_columns + list(df_final.columns[len(id_columns)+1:])
# Sütunları istediğimiz gibi yeniden isimlendirelim (Örn: "Öğrenci" -> "Öğrenci Adı")
df_final = df_final.rename(columns={"Öğrenci": "Öğrenci Adı"})
# <<< DEĞİŞİKLİK BURADA BİTİYOR >>>
st.success("Dönüştürme işlemi başarıyla tamamlandı!")
st.subheader("Dönüştürülmüş Veri (Nihai Sonuç)")
st.dataframe(df_final)
st.subheader("4. Dönüştürülmüş Dosyayı İndir")
output = io.BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df_final.to_excel(writer, index=False, sheet_name='Donusturulmus_Veri')
st.download_button(
label="(.xlsx) Olarak İndir",
data=output.getvalue(),
file_name='donusturulmus_tablo.xlsx',
mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
except Exception as e:
st.error(f"Bir hata oluştu: {e}")
streamlit run dosya_adi.py
Yapmak istediğinizi tam olarak anlayamadım. Başlıkta yazana göre satırlarda yazan "X Grubu" yazıları sütunlara geçecek. Öğrenci, Öğrenci Tel gibi sütunlar da satırlara geçecek. Ama konuda yazana göre de kafam karıştı. Rica etsem tam istediğinizi anlatır mısınız?
3. taraf bir yazılım değil Python kodu kullandım. Kodları direkt olarak size verebilirim, tek dosya kod. Yapay zekaya yaptırdım. Hatta siz de kodu istediğiniz yapay zekaya atıp istediğiniz gibi incelemesini isteyebilirsiniz. Bilgisayarınızda lokal olarak çalışır, dışarıya veri göndermez. Hatta Python ve gerekli bağımlılıkları kurduktan sonra interneti kapatıp, işinizi görüp, kodu internete henüz bağlanmadan silebilirsiniz.Evet bu ama veriler gerçek kişilerin verileri olduğu için 3. taraf bir yazılım kullanmak olumsuz sonuçlar doğurabilir. Bu nedenle formül istiyorum.
Yine de ilgi ve alakanız için teşekkürler.
3. taraf bir yazılım değil Python kodu kullandım. Kodları direkt olarak size verebilirim, tek dosya kod. Yapay zekaya yaptırdım. Hatta siz de kodu istediğiniz yapay zekaya atıp istediğiniz gibi incelemesini isteyebilirsiniz. Bilgisayarınızda lokal olarak çalışır, dışarıya veri göndermez. Hatta Python ve gerekli bağımlılıkları kurduktan sonra interneti kapatıp, işinizi görüp, kodu internete henüz bağlanmadan silebilirsiniz.
Kodla birlikte yapacağınız;
Kodu birazdan paylaşabilirim.
- E-tablo'yu xlsx formatında indirmek,
- Python kodunu çalıştırıp xlsx dosyasını araca atmanız,
- Gerekli düzenlemeler sonrası yeni xlsx dosyasını alıp Google Sheets'e upload etmeniz gerekiyor.
python --version yazarak sürümü de kontrol edebilirsiniz.pip install streamlit pandas openpyxl xlsxwriter
import streamlit as st
import pandas as pd
import io
st.set_page_config(page_title="Geniş Tabloyu Uzun Tabloya Dönüştürücü", layout="wide")
st.title("Excel Tablo Dönüştürme Aracı (Unpivot)")
st.info("""
Bu araç, her satırda birden fazla öğrenci/kayıt bilgisi içeren geniş Excel tablolarını,
her satırda tek bir kayıt olacak şekilde uzun ve düzenli bir formata dönüştürür.
""")
uploaded_file = st.file_uploader(
"Lütfen dönüştürmek istediğiniz Excel (.xlsx) dosyasını buraya yükleyin",
type="xlsx"
)
if uploaded_file is not None:
try:
df_original = pd.read_excel(uploaded_file, dtype=str) # Tüm veriyi metin olarak oku, numara formatını koru
st.subheader("1. Orjinal Veri Önizlemesi")
st.dataframe(df_original.head())
st.subheader("2. Sabit Kalacak Sütun(ları) Seçin")
st.write("Bu sütunlar dönüştürme işleminden etkilenmeyecek ve her satırda tekrar edecektir. (Örn: 'grup adı')")
id_columns = st.multiselect(
"Sabit kalacak sütunları seçin:",
options=df_original.columns.tolist(),
default=df_original.columns.tolist()[0] if not df_original.columns.empty else None
)
if not id_columns:
st.warning("Lütfen sabit kalacak en az bir sütun seçin.")
else:
value_columns = [col for col in df_original.columns if col not in id_columns]
st.subheader("3. Tabloyu Dönüştür")
if st.button("Dönüştür ve Sonucu Göster"):
df_melted = pd.melt(
df_original,
id_vars=id_columns,
value_vars=value_columns,
var_name="Bilgi Türü",
value_name="Değer"
)
df_melted.dropna(subset=['Değer'], inplace=True)
df_melted = df_melted[df_melted['Değer'] != '']
# --- ADIM 2: BİLGİ AYRIŞTIRMA VE PIVOT ---
# <<< DEĞİŞİKLİK BURADA BAŞLIYOR >>>
# 'Bilgi Türü' sütununu 'Öğrenci Sırası' ve 'Özellik' olarak ikiye ayır.
# Örnek: "1. Öğrenci No" -> ["1.", "Öğrenci No"]
df_melted[['Öğrenci Sırası', 'Özellik']] = df_melted['Bilgi Türü'].str.split(n=1, expand=True)
# Artık "Bilgi Türü" sütununa ihtiyacımız yok, onu atabiliriz
df_melted = df_melted.drop(columns=['Bilgi Türü'])
# Pivot işlemi: Her öğrencinin bilgilerini tek satırda birleştir.
# İndeks olarak grup adı ve öğrenci sırasını kullan. 'Özellik' sütunundaki değerleri yeni sütun başlıkları yap.
df_final = df_melted.pivot(
index=id_columns + ['Öğrenci Sırası'],
columns='Özellik',
values='Değer'
).reset_index()
# Pivot işleminden sonra oluşan sütun adı indexini temizle
df_final.columns.name = None
# Gereksiz sütunları (Öğrenci Sırası gibi) kaldırabilir ve sütunları yeniden sıralayabiliriz.
# Orjinal tablodaki sütun başlıklarına benzemesi için düzenleme
desired_columns_order = [
'grup adı', '1. Öğrenci', '1. Öğrenci No', '1. Öğrenci Tel'
]
# Pivot sonucunda oluşan başlıkları ("Öğrenci", "Öğrenci No") alalım
final_columns = id_columns + list(df_final.columns[len(id_columns)+1:])
# Sütunları istediğimiz gibi yeniden isimlendirelim (Örn: "Öğrenci" -> "Öğrenci Adı")
df_final = df_final.rename(columns={"Öğrenci": "Öğrenci Adı"})
# <<< DEĞİŞİKLİK BURADA BİTİYOR >>>
st.success("Dönüştürme işlemi başarıyla tamamlandı!")
st.subheader("Dönüştürülmüş Veri (Nihai Sonuç)")
st.dataframe(df_final)
st.subheader("4. Dönüştürülmüş Dosyayı İndir")
output = io.BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df_final.to_excel(writer, index=False, sheet_name='Donusturulmus_Veri')
st.download_button(
label="(.xlsx) Olarak İndir",
data=output.getvalue(),
file_name='donusturulmus_tablo.xlsx',
mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
except Exception as e:
st.error(f"Bir hata oluştu: {e}")
streamlit run dosya_adi.py
Rica ederim. Eğer deneyimsizseniz korkmayın, zor bir şey değil.
Evvela Python'u indirin.
Eki Görüntüle 2601186
Ardından kurarken görselde kırmızı kutudaki işaretlemeyi yapmayı unutmayın ve "ınstall now" deyin.
Eki Görüntüle 2601187
Kurulumdan emin olmak için CMD'yi açıppython --versionyazarak sürümü de kontrol edebilirsiniz.
Ardından CMD'de, Python kodumuzun çalışması için gerekli bağımlılıkları indirip kuracak komutu girin ve Enter'a basın.
Bash:pip install streamlit pandas openpyxl xlsxwriter
Ardından hepsi kurulduğunda aşağıdaki dosyayı bir klasöre kaydedin, örneğin masaüstü'ne. Dosya uzantısının sonu .py olmalı.
Python:import streamlit as st. import pandas as pd. import io. st.set_page_config(page_title="Geniş Tabloyu Uzun Tabloya Dönüştürücü", layout="wide") st.title("Excel Tablo Dönüştürme Aracı (Unpivot)") st.info(""" Bu araç, her satırda birden fazla öğrenci/kayıt bilgisi içeren geniş Excel tablolarını, her satırda tek bir kayıt olacak şekilde uzun ve düzenli bir formata dönüştürür. """) uploaded_file = st.file_uploader( "Lütfen dönüştürmek istediğiniz Excel (.xlsx) dosyasını buraya yükleyin", type="xlsx" ) if uploaded_file is not None: try: df_original = pd.read_excel(uploaded_file, dtype=str) # Tüm veriyi metin olarak oku, numara formatını koru. st.subheader("1. Orjinal Veri Önizlemesi") st.dataframe(df_original.head()) st.subheader("2. Sabit Kalacak Sütun(ları) Seçin") st.write("Bu sütunlar dönüştürme işleminden etkilenmeyecek ve her satırda tekrar edecektir. (Örn: 'grup adı')") id_columns = st.multiselect( "Sabit kalacak sütunları seçin:", options=df_original.columns.tolist(), default=df_original.columns.tolist()[0] if not df_original.columns.empty else None. ) if not id_columns: st.warning("Lütfen sabit kalacak en az bir sütun seçin.") else: value_columns = [col for col in df_original.columns if col not in id_columns] st.subheader("3. Tabloyu Dönüştür") if st.button("Dönüştür ve Sonucu Göster"): df_melted = pd.melt( df_original, id_vars=id_columns, value_vars=value_columns, var_name="Bilgi Türü", value_name="Değer" ) df_melted.dropna(subset=['Değer'], inplace=True) df_melted = df_melted[df_melted['Değer'] != ''] # --- ADIM 2: BİLGİ AYRIŞTIRMA VE PIVOT --- # <<< DEĞİŞİKLİK BURADA BAŞLIYOR >>> # 'Bilgi Türü' sütununu 'Öğrenci Sırası' ve 'Özellik' olarak ikiye ayır. # Örnek: "1. Öğrenci No" -> ["1.", "Öğrenci No"] df_melted[['Öğrenci Sırası', 'Özellik']] = df_melted['Bilgi Türü'].str.split(n=1, expand=True) # Artık "Bilgi Türü" sütununa ihtiyacımız yok, onu atabiliriz. df_melted = df_melted.drop(columns=['Bilgi Türü']) # Pivot işlemi: Her öğrencinin bilgilerini tek satırda birleştir. # İndeks olarak grup adı ve öğrenci sırasını kullan. 'Özellik' sütunundaki değerleri yeni sütun başlıkları yap. df_final = df_melted.pivot( index=id_columns + ['Öğrenci Sırası'], columns='Özellik', values='Değer' ).reset_index() # Pivot işleminden sonra oluşan sütun adı indexini temizle. df_final.columns.name = None. # Gereksiz sütunları (Öğrenci Sırası gibi) kaldırabilir ve sütunları yeniden sıralayabiliriz. # Orjinal tablodaki sütun başlıklarına benzemesi için düzenleme. desired_columns_order = [ 'grup adı', '1. Öğrenci', '1. Öğrenci No', '1. Öğrenci Tel'. ] # Pivot sonucunda oluşan başlıkları ("Öğrenci", "Öğrenci No") alalım. final_columns = id_columns + list(df_final.columns[len(id_columns)+1:]) # Sütunları istediğimiz gibi yeniden isimlendirelim (Örn: "Öğrenci" -> "Öğrenci Adı") df_final = df_final.rename(columns={"Öğrenci": "Öğrenci Adı"}) # <<< DEĞİŞİKLİK BURADA BİTİYOR >>> st.success("Dönüştürme işlemi başarıyla tamamlandı!") st.subheader("Dönüştürülmüş Veri (Nihai Sonuç)") st.dataframe(df_final) st.subheader("4. Dönüştürülmüş Dosyayı İndir") output = io.BytesIO() with pd.ExcelWriter(output, engine='xlsxwriter') as writer: df_final.to_excel(writer, index=False, sheet_name='Donusturulmus_Veri') st.download_button( label="(.xlsx) Olarak İndir", data=output.getvalue(), file_name='donusturulmus_tablo.xlsx', mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) except Exception as e: st.error(f"Bir hata oluştu: {e}")
Ardından, dosyayı kaydettiğiniz yeri Dosya Gezgini'nde açın, yukarıdaki adres çubuğuna CMD yazıp Enter'a basın. Bu sayede CMD'yi kod dosyasının olduğu yerde açmış olursunuz. ("dosya_adi" yazan yere kendi dosyanızın adını yazmayı unutmayın.
Eki Görüntüle 2601199
Bash:streamlit run dosya_adi.py
Araç, tarayıcınızda otomatik olarak açılacak. Şimdi Google sheets'ten indirdiğiniz xlsx dosyasını buraya yükleyip istediğinizi yapabilirsiniz.
Aklınıza takılan bir yer olursa sormaktan çekinmeyin.
Ayrıca şuna dikkat edebilirsiniz, yeni dosyayı direkt eski Google e-tablo'nuz üzerine yazmayın ki bir sorun, istenmeyen bir durum yaşanırsa geri dönebilesiniz.
Rica ederim. Eğer çözülürse çözüm olarak işaretleyebilirsiniz/raporlayabilirsiniz ya da takıldığınız bir nokta olduğunda sorabilirsiniz.Çok teşekkür ederim, gerçekten çok açıklayıcı ve özenli bir anlatım olmuş. Görsellerle birlikte adım adım ilerlemek işi oldukça kolaylaştırıyor. Bu konularda az çok deneyimim var ama yine de bu kadar sade ve sistemli bir rehber hazırlamak herkesin aklına gelmezdi.
Emeğiniz ve detaylı açıklamanız için tekrar teşekkür ederim.