• 0

فصل صف من الأعمدة الى أعمدة مختلفة في pandas

لدي بيانات على الشكل التالي:

df = pd.DataFrame({"Fruits": [["Apple", "Oragne"] for i in range(7)]})

       Fruits
0  [Apple, Orange]
1  [Apple, Orange]
2  [Apple, Orange]
3  [Apple, Orange]
4  [Apple, Orange]
5  [Apple, Orange]
6  [Apple, Orange]

وأود أن أقوم بفصل العمود الثاني الذي هو عبارة عن صف الى عمودين مختلفين كالتالي:

     Fruit1  Fruit2
0    Apple   Orange
1    Apple   Orange
2    Apple   Orange
3    Apple   Orange
4    Apple   Orange
5    Apple   Orange
6    Apple   Orange

كيف أستطيع أن أقوم بهذا؟

تمّ تعديل بواسطة Mohamed Elnemr
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


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

تابع معي.. أول طريقة هي استخدام الدالة apply:

import pandas as pd
# هنا فقط تعريف الداتا
df = pd.DataFrame({"Fruits": [["Apple", "Oragne"] for i in range(7)]})
print("Given Dataframe is :\n",df)
# الآن سنقوم بتطبيق التابع لمدا على كل سطر من البيانات
df=df.Fruits.apply(lambda x: pd.Series(" ".join(x).split()))
print("\nSplitting Fruits column into two different columns :") 
# تغيير أسماء الأعمدة بالشمل الذي نريده
df.columns=["F1","F@"]
print(df)
"""
Given Dataframe is :
             Fruits
0  [Apple, Oragne]
1  [Apple, Oragne]
2  [Apple, Oragne]
3  [Apple, Oragne]
4  [Apple, Oragne]
5  [Apple, Oragne]
6  [Apple, Oragne]

Splitting Fruits column into two different columns :
      F1      F@
0  Apple  Oragne
1  Apple  Oragne
2  Apple  Oragne
3  Apple  Oragne
4  Apple  Oragne
5  Apple  Oragne
6  Apple  Oragne
"""

الفكرة الرئيسية في الكود السابق هو السطر:

df=df.Fruits.apply(lambda x: pd.Series(" ".join(x).split()))

كما نعلم فإن Apply يقوم بالمرور على أسطر البيانات سطر سطر ويطبق عليه تابع معين، ونحن استخدمنا التابع lambda الذي يمكننا من كتابة تابع مباشرةً، حيث يقوم هذا التابع بتحويل كل قائمة من الشكل [Apple, Oragne] إلى string من الشكل "Apple Oragne" ثم نقوم بتطبيق دالة split عليها (تقوم هذه الدالة بتحويل السلسلة النصية إللا قائمة بعد أن تقوم بفصل كلمات السلسلة على أساس محرف معين-افتراضياً يتم الفصل على أساس الفراغات-) ثم يتم تحويل القائمة الناتجة إلى pandas.sreies وهذه هي كل الفكرة. للوضوح أكثر:

# هذا مايحدث في كل سطر
" ".join(["Apple", "Oragne"])
# "Apple Oragne"
"Apple Oragne".split()
# ['Apple', 'Oragne']
pd.Series(['Apple', 'Oragne'])
"""
0     Apple
1    Oragne
dtype: object
"""

الآن بشكل مشابه قليلاً للطريقة السابقة لكنها تمنحك تحكم أقل في حال كانت المشاكلة أكثر تعقيداً وهي tolist لكنها هنا أسهل:

df=pd.DataFrame(df.Fruits.to_list(),columns = ['F1','F2'])
print("\nSplitting Fruits column into two different columns :") 
print(df)
"""
Splitting Fruits column into two different columns :
      F1      F2
0  Apple  Oragne
1  Apple  Oragne
2  Apple  Oragne
3  Apple  Oragne
4  Apple  Oragne
5  Apple  Oragne
6  Apple  Oragne
"""

في الحالة العامة أي عندما يكون لدينا نص مركب ونريد وضع كل جزء في عمود كما في المثال التالي، يكفينا استخدام الدالة split مع تحديد المحرف الذي نريد الفصل على أساسه:

import pandas as pd
df = pd.DataFrame({'Name': ['Ali Ahmad', 'Eyad Ismael']})
print("Given Dataframe is :\n",df)
print("\nSplitting 'Name' column into two different columns :\n")
df=df.Name.str.split(expand=True)
df.columns=["First","Last"]
print(df)
"""
Given Dataframe is :
           Name
0    Ali Ahmad
1  Eyad Ismael
Splitting 'Name' column into two different columns :
  First    Last
0   Ali   Ahmad
1  Eyad  Ismael
"""

 

انشر على الشّبكات الاجتماعية


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

يمكنك ببساطة أستخدام الدالة to_list والتي ستقوم بعمل ما تريد تماما، حيث انها تفصل الصف الى عناصر مختلفة ومنها يمكنك جعلك تلك العناصر في شكل أعمدة.

أنظر الكود التالي للتوضيح:

df2[['Fruit1','Fruit2']] = pd.DataFrame(df2.Fruits.tolist(), index= df2.index)
print (df2)

     Fruit1  Fruit2
0    Apple   Orange
1    Apple   Orange
2    Apple   Orange
3    Apple   Orange
4    Apple   Orange
5    Apple   Orange
6    Apple   Orange

كذلك إذا أردت فصل مجوعة من العناصر لكنها ليست في شكل list، كأن تكون العلامة "," هي الفاصل بين العناصر مثلا، يمكنك استخدام الكود التالي:

pd.DataFrame(df["Fruits"].str.split('<delim>', expand=True).values,
             columns=['Fruit1', 'Fruit2'])

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن