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

السؤال

نشر

لدي العديد من البيانات على شكل dataframe، واريد أن أجد طريقة أقوم بعمل إضافة لهم append مرة واحدة عوضاً عن عمل append لكل واحدة مفردها:

df.append(df)

لنفرض أن لدي  dataframes أسماؤهم d1,d2,d3,d4,d5  جربت الطريقة التالية لاضافتهم مرة واحدة لكن لم تفلح:

df = rbind(d1,d2,d3,d4,d5)

كيف يمكنني فعل هذا؟

Recommended Posts

  • 0
نشر

يمكن عمل concat كالتالي:

pd.concat([d1, d2, d3, d4, d5])

أو يمكنك كذلك استخدام ignore_index كالتالي:

pd.concat([d1, d2, d3, d4, d5], ignore_index=True)

أو يمكنك عمل append لكل ال dataframes مرة واحدة كالتالي:

import numpy as np
import pandas as pd

dates = np.asarray(pd.date_range('1/1/2021', periods=8))
df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['D1', 'D2', 'D3', 'D4'])
df2 = df1.copy()
df3 = df1.copy()
df = df1.append([df2, df3])

 

  • 0
نشر

لتكن لدينا البيانات التالية:

import pandas as pd
df1 = pd.DataFrame({'id': ['1', '2'],
					'Name': ['ali', 'Eyad']})
df1
"""
id 	Name
0 	1 	ali
1 	2 	Eyad
"""
df2 = pd.DataFrame({'id': ['3', '4'],
					'Name': ['asdc', 'gbf']})
df2
"""
id 	Name
0 	3 	asdc
1 	4 	gbf
"""
  1. pd.concat:
    dataframes = [df1, df2]
    pd.concat(dataframes)
    """
    id 	Name
    0 	1 	ali
    1 	2 	Eyad
    0 	3 	asdc
    1 	4 	gbf
    """
    # لاحظ أن الفهرس أصبح غير مرتب وبالتالي لضبطه نقوم بالتالي
    pd.concat(dataframes, ignore_index=True)
    """
    id 	Name
    0 	1 	ali
    1 	2 	Eyad
    2 	3 	asdc
    3 	4 	gbf
    """

     

  2. df.append:
    df1.append([df2])
    """
    id 	Name
    0 	1 	ali
    1 	2 	Eyad
    0 	3 	asdc
    1 	4 	gbf
    """
    # كذلك لإصلاح الفهرس نضيف الوسيط التالي
    df1.append([df2],ignore_index=True)

     

  3. الحلول الأسرع مع البيانات الكبيرة تكون من خلال الاتجاه إلى نمباي وهناك العديد من الطرق للقيام بذلك وسأذكر اثنين منها (هما الأفضل لأداء المهمة):
    # vstack
    import numpy as np
    pd.DataFrame(np.vstack((df1.to_numpy(),df2.to_numpy())),columns=["id","name"])
    """
    id 	name
    0 	1 	ali
    1 	2 	Eyad
    2 	3 	asdc
    3 	4 	gbf
    """
    # column_stack
    pd.DataFrame(np.column_stack((df1.to_numpy().T,df2.to_numpy().T)).T,columns=["id","name"])
    """
    id 	name
    0 	1 	ali
    1 	2 	Eyad
    2 	3 	asdc
    3 	4 	gbf
    """

    وللمقارنة بين المناهج السابقة:

    %timeit pd.DataFrame(np.vstack((df1.to_numpy(),df2.to_numpy())),columns=["id","name"])
    # 1000 loops, best of 5: 398  µs per loop
    %timeit df1.append([df2])
    # 1000 loops, best of 5: 473  µs per loop
    %timeit pd.concat([df1, df2])
    # 1000 loops, best of 5: 434 µs per loop
    %timeit  pd.DataFrame(np.column_stack((df1.to_numpy().T,df2.to_numpy().T)).T,columns=["id","name"])
    # 1000 loops, best of 5: 407 µs per loop

    vstack هو الأفضل. ويظهر الفرق أكبر عندما نتعامل مع عدد كبير من الداتافريم أو الأحجام الكبيرة.

 

 

  • 0
نشر

إذا كانت الأعمدة في dataframes مختلف ، يمكنك إضافتها للإلحاق

#list dataframe الذي تريد إلحاقه
frame = [d1,d2,d3,d4,d5]

#new dataframe لتخزين إلحاق النتيجة
myDataFrame = pd.DataFrame()

for df in frame:
    myDataFrame = myDataFrame.append(df)

تأكد من أن إلحاق البيانات تم بنجاح عن طريق التحقق من طول DataFrame باستخدام:

len(myDataFrame)

إذا كانت جميع الأعمدة في dataframes نفسها ، فلن يكون كل dataframes مصدر قلق طالما أن الأعمدة في dataframes  نفسه ، يمكنك استخدام pd.concat (dataframe) كما هو مذكور بواسطة المدرب أحمد.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...