اذهب إلى المحتوى
  • 0

دمج DataFrame بشكل أفقي

Ahmed Ahmed64

السؤال

السلام عليكم

استخدمت لدمج DataFrame من خلال هذا الكود 

حيث كل DataFrame تأتي تحت الأخرى

self.Table=pd.concat([a1,a2,a3],axis=0)

لاكن واجهة هذا الخطأ

pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects

كيف ممكن معالجة هذه المشكلة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 16 ساعة قال Ahmed Ahmed64:

حيث كل DataFrame تأتي تحت الأخرى

self.Table=pd.concat([a1,a2,a3],axis=0)

لاكن واجهة هذا الخطأ

pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects

كيف ممكن معالجة هذه المشكل

وعليكم السلام

الخطأ هنا يقول أن إطارات البيانات التي تم توحيدها (a1, a2, a3) لديها مؤشرات مكررة. 

فيجب تعيين الفهرس مجددًا بشكل فريد لكل إطار بيانات قبل الدمج:

a1 = a1.reset_index(drop=True) 
a2 = a2.reset_index(drop=True)
a3 = a3.reset_index(drop=True)

self.Table = pd.concat([a1, a2, a3], axis=0)

يجب استخدام `ignore_index=True` أثناء عملية الدمج:

باستخدام ignore_index=True سيقوم pandas بإعادة تعيين الأرقام بشكل متلاحق دون تكرار، حتى لو كانت مكررة في الأصل. 

فهذا سيؤدي لدمج البيانات بشكل صحيح دون أخطاء.

self.Table = pd.concat([a1, a2, a3], axis=0, ignore_index=True) 

تأكد من أن المؤشرات فريدة لكل إطار بيانات قبل الدمج لتجنب هذه المشكلة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 ساعة قال Khaled Osama3:

وعليكم السلام

الخطأ هنا يقول أن إطارات البيانات التي تم توحيدها (a1, a2, a3) لديها مؤشرات مكررة. 

فيجب تعيين الفهرس مجددًا بشكل فريد لكل إطار بيانات قبل الدمج:

a1 = a1.reset_index(drop=True) 
a2 = a2.reset_index(drop=True)
a3 = a3.reset_index(drop=True)

self.Table = pd.concat([a1, a2, a3], axis=0)

يجب استخدام `ignore_index=True` أثناء عملية الدمج:

باستخدام ignore_index=True سيقوم pandas بإعادة تعيين الأرقام بشكل متلاحق دون تكرار، حتى لو كانت مكررة في الأصل. 

فهذا سيؤدي لدمج البيانات بشكل صحيح دون أخطاء.

self.Table = pd.concat([a1, a2, a3], axis=0, ignore_index=True) 

تأكد من أن المؤشرات فريدة لكل إطار بيانات قبل الدمج لتجنب هذه المشكلة.

عفواً أخي هل لك أن توضح لي التعديل على هذا الكود

import customtkinter
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
import pandas as pd
from pathlib import Path

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()
        self.title("App-v1")
        self.grid_columnconfigure(0, weight = 1)
        self.grid_rowconfigure(1, weight = 1)
        customtkinter.set_appearance_mode("dark")
        customtkinter.set_default_color_theme("green")
        Menu(self)
        
    def File_dialog(self):
        
        self.filename = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main", title="Open file okay?", filetypes=(("text files", "*.xlsx"),("all files", "*.*")))
        self.label_file["text"] = self.filename
        
        return None

    def Load_excel_data(self):
        
        file_path = self.label_file["text"]
        try:
            excel_filename = r"{}".format(file_path)
            if excel_filename[-4:] == ".csv":
                df = pd.read_csv(excel_filename)
            else:
                df = pd.ExcelFile(excel_filename)
                self.optionmenu1.configure(values = df.sheet_names)
                self.qq = df.sheet_names
                self.label2["text"] = df.sheet_names

              
        except ValueError:
            tk.messagebox.showerror("Information", "The file you have chosen is invalid")
            return None
        except FileNotFoundError:
            tk.messagebox.showerror("Information", f"إختر ملف أولاً {file_path}")
            return None
    def optionmenu_callback(self,choice):
        self.label2.configure(text=choice)
        

    def lod_Frame(self,cl3,cl4,cl5,cl6,xa,xb):
        
        df = pd.read_excel(self.filename,sheet_name=self.label2["text"],header=None)
    
        selected_column_1 = df.iloc[8::2, [0,1,2,cl3,cl4,cl5,cl6]]
        selected_column_1.reset_index(drop=True)
    
        selected_column_2 = df.iloc[9::2, [2,cl3,cl4,cl5,cl6]]
        selected_column_2.reset_index(drop=True, inplace=True)
    
        A = pd.DataFrame(selected_column_1)
        B = pd.DataFrame(selected_column_2)
     
        self.Table=pd.concat([A,B],axis=1) 
        
    
        repeated_values1 = []
        repeated_values2 = []
        for i in range(len(self.Table)):
             repeated_values1.append(df.iloc[xa,xb])
             repeated_values2.append(df.iloc[3,4])
        self.Table['إسم المادة'] = repeated_values1
        self.Table['العام الدراسي'] = repeated_values2
        self.Table.fillna(0, inplace=True)
        self.Table['1أكبر_قيمة'] = self.Table.iloc[:, [5,6]].max(axis=1)
        self.Table['2أكبر_قيمة'] = self.Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
        self.Table['3أكبر_قيمة'] = self.Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] <= 50 else None, axis=1)
        
        return self.Table


    def lod_data(self):
        App()

        a1= self.lod_Frame(3,4,5,6,6,3)
        a1 = a1.reset_index(drop=True)
        a2= self.lod_Frame(7,8,9,10,6,7)
        a2 = a2.reset_index(drop=True)
        a3= self.lod_Frame(11,12,13,14,6,11)
        a3 = a3.reset_index(drop=True)
        a4= self.lod_Frame(15,16,17,18,6,15)
        a4 = a4.reset_index(drop=True)
        a5= self.lod_Frame(19,20,21,22,6,19)
        a5 = a5.reset_index(drop=True)
        a6= self.lod_Frame(23,24,25,26,6,23)
        a6 = a6.reset_index(drop=True)
        a7= self.lod_Frame(27,28,29,30,6,27)
        a7 = a7.reset_index(drop=True)
        a8= self.lod_Frame(31,32,33,34,6,31)
        a8 = a8.reset_index(drop=True)
        a9= self.lod_Frame(35,36,37,38,6,35)
        a9 = a9.reset_index(drop=True)
        a10= self.lod_Frame(39,40,41,42,6,39)
        a10 = a10.reset_index(drop=True)
        a11= self.lod_Frame(43,44,45,46,6,43)
        a11 = a11.reset_index(drop=True)
        a12= self.lod_Frame(47,48,49,50,6,47)
        a12 = a12.reset_index(drop=True)
        a13= self.lod_Frame(51,52,53,54,6,51)
        a13 = a13.reset_index(drop=True)
        a14= self.lod_Frame(55,56,57,58,6,55)
        a14 = a14.reset_index(drop=True)
        a15= self.lod_Frame(59,60,61,62,6,59)
        a15 = a15.reset_index(drop=True)
        #self.Table = self.Table.reset_index()
        rtb=pd.concat([a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15],axis=0, ignore_index=True)
       # self.Table.to_excel("ALL2025.xlsx",sheet_name=self.label2["text"])
        
        with pd.ExcelWriter('ALL2030.xlsx',if_sheet_exists="overlay",mode='a') as writer:
             rtb.to_excel(writer, sheet_name=self.label2["text"],header=None,index=False)
        

class Menu(customtkinter.CTkFrame,App):
    def __init__(self, master):
        super().__init__(master)
        
        self.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="ew")
        self.columnconfigure(0, weight = 1)
        self.rowconfigure(1, weight = 1)
        self.configure(border_width=1,border_color="#0087f2")
        self.create_widgets()

    def create_widgets(self):
        self.button1 = customtkinter.CTkButton(self, text = 'File_dialog',command=self.File_dialog)
        self.button1.grid(row = 0, column = 3, padx=(10, 10), pady=(10, 10), sticky="e")
        self.label_file = ttk.Label(self, text="")
        self.label_file.grid(row = 0, column = 0, padx=(10, 10), pady=(10, 10), sticky="e")

        self.button2 = customtkinter.CTkButton(self, text = 'Load_excel',command=self.Load_excel_data)
        self.button2.grid(row = 0, column = 2, padx=(10, 10), pady=(10, 10), sticky="e")
        self.label2 = ttk.Label(self, text="")
        self.label2.grid(row = 1, column = 0, padx=(10, 10), pady=(10, 10), sticky="e")

        self.optionmenu1 = customtkinter.CTkOptionMenu(self,values=["إختر ورقة العمل"], font=customtkinter.CTkFont(family="Calibri", size=12, weight="bold"))
        self.optionmenu1.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="e")
        self.optionmenu1.configure(command=self.optionmenu_callback)

        self.button3 = customtkinter.CTkButton(self, text = 'RUN',command=self.lod_data)
        self.button3.grid(row = 1, column = 3, padx=(10, 10), pady=(10, 10), sticky="e")
app = App()
app.mainloop()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 42 دقائق مضت قال Ahmed Ahmed64:

عفواً أخي هل لك أن توضح لي التعديل على هذا الكود

 

يبدو انك تضع  في الكود 

بتاريخ 2 ساعة قال Khaled Osama3:
self.Table = pd.concat([a1, a2, a3], axis=0, ignore_index=True) 

 

فهل يواجهك نفس الخطأ المسبق ام خطأ اخر ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 دقائق مضت قال Ahmed Ahmed64:

نفس الخطأ

لا داعي لإنشاء متغيرات A و B، بما أننا سنقوم بدمج selected_column_1 و selected_column_2 مباشرة, يفضل إعادة تعيين الفهرس مرة واحدة بعد الدمج لتجنب أي مشاكل.

selected_column_1 = df.iloc[8::2, [0,1,2,cl3,cl4,cl5,cl6]]  

selected_column_2 = df.iloc[9::2, [2,cl3,cl4,cl5,cl6]]

self.Table = pd.concat([selected_column_1, selected_column_2], axis=1, ignore_index=True)

self.Table.reset_index(drop=True, inplace=True)
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...