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

الإضافة على ملف Excel السابق باستخدام مكتبة pandas

Ahmed Ahmed64

السؤال

السلام عليكم ورحمة الله وبركاته

جمعة مباركة للجميع

لدي سؤال أريد طرحة عليكم

إخوتي لدي  Data Frame وقمت بحفظها على ملف إكسل من خلال الكود التالي

Table.to_excel("123456.xlsx", index=False)

الأن لدي Data Frame بنفس عدد الأعمدة 

أريد حفظها على نفس الملف السابق استكمال للجدول السابق فما هو الكود المستخدم لأتمكن من الحفظ على نفس الملف دون فقدان البيانات الأولى

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

Recommended Posts

  • 0

يتوفر الخيار append=True في الدالة to_excel()، وذلك هذا سيؤدي إلى إضافة البيانات الجديدة إلى نهاية الملف الموجود، دون استبدال البيانات الموجودة.

كالتالي:

Table2.to_excel("123456.xlsx", index=False, append=True)

والنتيجة هي إضافة البيانات في Table2 إلى نهاية ملف 123456.xlsx.

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

  • 0
بتاريخ 16 دقائق مضت قال Mustafa Suleiman:

يتوفر الخيار append=True في الدالة to_excel()، وذلك هذا سيؤدي إلى إضافة البيانات الجديدة إلى نهاية الملف الموجود، دون استبدال البيانات الموجودة.

كالتالي:

Table2.to_excel("123456.xlsx", index=False, append=True)

والنتيجة هي إضافة البيانات في Table2 إلى نهاية ملف 123456.xlsx.

أخي لم تنج معي الفكرة

أوضح لك أكثر 

يوجد هذا الكود كالتالي

import pandas as pd

def Subject_One(cl1,cl2,cl3,cl4):

    
    df = pd.read_excel("AAA.xlsx",header=None)
    
    selected_column_1 = df.iloc[8::2, [0,1,2,cl1,cl2,cl3,cl4]]
    selected_column_1.reset_index(drop=True, inplace=True)
    
    selected_column_2 = df.iloc[9::2, [2,cl1,cl2,cl3,cl4]]
    selected_column_2.reset_index(drop=True, inplace=True)
    
    A = pd.DataFrame(selected_column_1)
    B = pd.DataFrame(selected_column_2)
   
    Table=pd.concat([A,B],axis=1)  
    
    repeated_values1 = []
    repeated_values2 = []
    for i in range(len(Table)):
         repeated_values1.append(df.iloc[6,3])
         repeated_values2.append(df.iloc[3,4])
    Table['الإسم'] = repeated_values1
    Table['الرقم'] = repeated_values2
    Table.fillna(0, inplace=True)
    Table["مرحلة الأولى"] = Table.iloc[:, [5,6]].max(axis=1)
    Table["مرحلة ثانية"] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
    Table['القيمة'] = 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)

Subject_One(3,4,5,6)
Subject_One(7,8,9,10)
Table.to_excel("20207.xlsx", index=False, append=True)    

هل أكتب كود الحفظ بهذه الكيفية

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

  • 0

لكي تتمكن من الوصول إلى المتغير Table خارج الدالة، عليك إرجاعه من الدالة كالتالي:

import pandas as pd

def Subject_One(cl1, cl2, cl3, cl4):
    df = pd.read_excel("AAA.xlsx", header=None)
    
    selected_column_1 = df.iloc[8::2, [0, 1, 2, cl1, cl2, cl3, cl4]]
    selected_column_1.reset_index(drop=True, inplace=True)
    
    selected_column_2 = df.iloc[9::2, [2, cl1, cl2, cl3, cl4]]
    selected_column_2.reset_index(drop=True, inplace=True)
    
    A = pd.DataFrame(selected_column_1)
    B = pd.DataFrame(selected_column_2)
   
    Table = pd.concat([A, B], axis=1)  
    
    repeated_values1 = [df.iloc[6, 3]] * len(Table)
    repeated_values2 = [df.iloc[3, 4]] * len(Table)
    
    Table['الإسم'] = repeated_values1
    Table['الرقم'] = repeated_values2
    Table.fillna(0, inplace=True)
    Table["مرحلة الأولى"] = Table.iloc[:, [5, 6]].max(axis=1)
    Table["مرحلة ثانية"] = Table.iloc[:, [10, 11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
    Table['القيمة'] = 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 Table

# استدعاء الدالة وحفظ النتائج في متغير
result1 = Subject_One(3, 4, 5, 6)
result2 = Subject_One(7, 8, 9, 10)

# دمج النتائج
final_result = pd.concat([result1, result2])

# حفظ النتائج في نفس الملف
final_result.to_excel("AAA.xlsx", index=False)

أو يمكن كتابة الكود كالتالي أيضًا:

def Subject_One(cl1,cl2,cl3,cl4):

   
  df = pd.read_excel("AAA.xlsx",header=None)
   
  selected_column_1 = df.iloc[8::2, [0,1,2,cl1,cl2,cl3,cl4]]
  selected_column_1.reset_index(drop=True, inplace=True)
   
  selected_column_2 = df.iloc[9::2, [2,cl1,cl2,cl3,cl4]]
  selected_column_2.reset_index(drop=True, inplace=True)
   
  A = pd.DataFrame(selected_column_1)
  B = pd.DataFrame(selected_column_2)
  
  Table=pd.concat([A,B],axis=1)  
   
  repeated_values1 = []
  repeated_values2 = []
  for i in range(len(Table)):
     repeated_values1.append(df.iloc[6,3])
     repeated_values2.append(df.iloc[3,4])
  Table['الإسم'] = repeated_values1
  Table['الرقم'] = repeated_values2
  Table.fillna(0, inplace=True)
  Table["مرحلة الأولى"] = Table.iloc[:, [5,6]].max(axis=1)
  Table["مرحلة ثانية"] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
  Table['القيمة'] = 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)

   
  # Write the data to the file
  with pd.ExcelWriter("AAA.xlsx", mode='a') as writer:
     Table.to_excel(writer, sheet_name='Sheet1', index=False)

Subject_One(3,4,5,6)
Subject_One(7,8,9,10)

 

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

  • 0
بتاريخ 55 دقائق مضت قال Mustafa Suleiman:

لكي تتمكن من الوصول إلى المتغير Table خارج الدالة، عليك إرجاعه من الدالة كالتالي:

import pandas as pd

def Subject_One(cl1, cl2, cl3, cl4):
    df = pd.read_excel("AAA.xlsx", header=None)
    
    selected_column_1 = df.iloc[8::2, [0, 1, 2, cl1, cl2, cl3, cl4]]
    selected_column_1.reset_index(drop=True, inplace=True)
    
    selected_column_2 = df.iloc[9::2, [2, cl1, cl2, cl3, cl4]]
    selected_column_2.reset_index(drop=True, inplace=True)
    
    A = pd.DataFrame(selected_column_1)
    B = pd.DataFrame(selected_column_2)
   
    Table = pd.concat([A, B], axis=1)  
    
    repeated_values1 = [df.iloc[6, 3]] * len(Table)
    repeated_values2 = [df.iloc[3, 4]] * len(Table)
    
    Table['الإسم'] = repeated_values1
    Table['الرقم'] = repeated_values2
    Table.fillna(0, inplace=True)
    Table["مرحلة الأولى"] = Table.iloc[:, [5, 6]].max(axis=1)
    Table["مرحلة ثانية"] = Table.iloc[:, [10, 11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
    Table['القيمة'] = 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 Table

# استدعاء الدالة وحفظ النتائج في متغير
result1 = Subject_One(3, 4, 5, 6)
result2 = Subject_One(7, 8, 9, 10)

# دمج النتائج
final_result = pd.concat([result1, result2])

# حفظ النتائج في نفس الملف
final_result.to_excel("AAA.xlsx", index=False)

أو يمكن كتابة الكود كالتالي أيضًا:

def Subject_One(cl1,cl2,cl3,cl4):

   
  df = pd.read_excel("AAA.xlsx",header=None)
   
  selected_column_1 = df.iloc[8::2, [0,1,2,cl1,cl2,cl3,cl4]]
  selected_column_1.reset_index(drop=True, inplace=True)
   
  selected_column_2 = df.iloc[9::2, [2,cl1,cl2,cl3,cl4]]
  selected_column_2.reset_index(drop=True, inplace=True)
   
  A = pd.DataFrame(selected_column_1)
  B = pd.DataFrame(selected_column_2)
  
  Table=pd.concat([A,B],axis=1)  
   
  repeated_values1 = []
  repeated_values2 = []
  for i in range(len(Table)):
     repeated_values1.append(df.iloc[6,3])
     repeated_values2.append(df.iloc[3,4])
  Table['الإسم'] = repeated_values1
  Table['الرقم'] = repeated_values2
  Table.fillna(0, inplace=True)
  Table["مرحلة الأولى"] = Table.iloc[:, [5,6]].max(axis=1)
  Table["مرحلة ثانية"] = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x)
  Table['القيمة'] = 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)

   
  # Write the data to the file
  with pd.ExcelWriter("AAA.xlsx", mode='a') as writer:
     Table.to_excel(writer, sheet_name='Sheet1', index=False)

Subject_One(3,4,5,6)
Subject_One(7,8,9,10)

 

أخي الكود الثاني يظهر لي الخطأ 

ValueError: Sheet 'Sheet1' already exists and if_sheet_exists is set to 'error'.

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

أما الكود بالطريقة الأولى التي أخبرتني بها ظهرت لي مشكلة

obj_labels.get_indexer(new_labels)

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

تم التعديل في بواسطة Ahmed Ahmed64
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

حاول استبدال محتويات ورقة العمل الحالية من خلال:

with pd.ExcelWriter("AAA.xlsx", mode='a') as writer:
    Table.to_excel(writer, sheet_name='Sheet1', index=False, if_sheet_exists='replace')

أو الإَضافة إلى نهاية ورقة العمل الحالية من خلال:

with pd.ExcelWriter("AAA.xlsx", mode='a') as writer:
    Table.to_excel(writer, sheet_name='Sheet1', startrow=writer.sheets['Sheet1'].max_row, index=False)
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

المشكلة قائمة هذا الخطأ عند محاولة إسخدام  الكود الأخير المستلم منك أخي لأعلم ماسبب المشكله

in Subject_One
    Table.to_excel(writer, sheet_name='Sheet1', startrow=writer.sheets['Sheet1'].max_row, index=False)
                                                         ~~~~~~~~~~~~~^^^^^^^^^^
KeyError: 'Sheet1'

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...