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

إستبدال عناصر بشروط في pandas

Mohamed Elnemr

السؤال

لدي بيانات على شكل Dataframe وأريد استبدال قيم بعض العناصر  التي تتخطى قيمتها 100 وأقوم بجعلها تساوى الصفر، فكرت باستخدام الكود التالي:

df[df.my_channel > 100].my_channel = 0

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

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

Recommended Posts

  • 0

بمكنك القيام بذلك من خلال الدالة mask:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011',
                                        '11/11/2011', '11/12/2011'],
                'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']})

df
"""
      Date     	Event
0 	11/8/2011 	Dance
1 	11/9/2011 	Painting
2 	11/10/2011 	Dance
3 	11/11/2011 	Dance
4 	11/12/2011 	Painting
"""
#Hip-Hop بال Dance استبدال  ال
df['Event'].mask(df['Event'] == 'Dance', 'Hip-Hop', inplace=True) #لكي يتم التعديل على البيانات الأصلية inplace==True نضع
df
"""
    Date       	Event
0 	11/8/2011 	Hip-Hop
1 	11/9/2011 	Painting
2 	11/10/2011 	Hip-Hop
3 	11/11/2011 	Hip-Hop
4 	11/12/2011 	Painting
"""

,أو باستخدام df.where:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011',
                                        '11/11/2011', '11/12/2011'],
                'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']})
#Hip-Hop بال Dance استبدال  ال
m = df.Event == 'Dance'
df.where(~m,other='Hip-Hop')

أو من خلال np.where:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011',
                                        '11/11/2011', '11/12/2011'],
                'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']})
#Art بال Painting استبدال  ال
df['Event'] = np.where((df.Event == 'Painting'),'Art',df.Event)
df
"""
Date 	Event
0 	11/8/2011 	Dance
1 	11/9/2011 	Art
2 	11/10/2011 	Dance
3 	11/11/2011 	Dance
4 	11/12/2011 	Art
"""

إضافة للطريقة التي قدمها أحمد وهي iloc:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011',
                                        '11/11/2011', '11/12/2011'],
                'Event' : ['Dance', 'Painting', 'Dance', 'Dance', 'Painting']})
#Hip-Hop بال Dance استبدال  ال
df.loc[(df.Event == 'Dance'),'Event']='Hip-Hop'
df
"""
    Date      	Event
0 	11/8/2011 	Hip-Hop
1 	11/9/2011 	Painting
2 	11/10/2011 	Hip-Hop
3 	11/11/2011 	Hip-Hop
4 	11/12/2011 	Painting
"""

 

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

  • 0

يمكنك استخدام الدالة iloc أو الدالة .loc من أجل تحديد أماكن العناصر التي تحقق الشرط الذي تريد تغييره كالتالي:

edge = df.my_channel > 100
column_name = 'my_channel'
df.loc[edge, column_name] = 0

أو في سطر واحد يمكنك كتابتها كالتالي:

df.loc[df.my_channel > 100, 'my_channel'] = 0

 

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

  • 0

يمكنك استخدام دالة np.where لفعل ذلك كالتالي

df['X'] = np.where(df['Y']>=100, 'yes', 'no')

في حالتك يمكنك فعله كالتالي

import numpy as np
df['my_channel'] = np.where(df.my_channel > 100, 0, df.my_channel)

 

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

  • 0

يمكنك ذلك عن طريق إستخدام الدالة loc كالتالي:

import pandas as pd

df = pd.DataFrame({'my_channel' : [100, 200, 500, 100, 50]})
df

الناتج عبارة عن:

   my_channel
0 	100
1 	200
2 	500
3 	100
4 	50

وبإستخدام الدالة loc الناتج يصبح:

df.loc[(df.my_channel > 100),'my_channel']= 0
df
  my_channel
0 	100
1 	0
2 	0
3 	100
4 	50

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...