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

حذف الأجزاء غير المرغوبة من string في pandas

Mohamed Elnemr

السؤال

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

    time    result
1    01:00   +52A
2    02:00   +62B
3    03:00   +72C
4    04:00   -82D
5    05:00   -92E

وأريد أن أجعلها تظهر على الشكل التالي:

    time    result
1    01:00   52
2    02:00   62
3    03:00   72
4    04:00   82
5    05:00   92

حاولت استخدام الدالة 

.str.lstrip('+-')

لكن يظهر لي الخطأ التالي:

TypeError: wrapper() takes exactly 1 argument (2 given)

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

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

Recommended Posts

  • 0

يمكنك ببساطة استخدام السطر التالي لحذف علامات الموجي + والسالب - وكذلك الحروف الكبيرة أو الصغيرة التي تريد كالتالي:

data['result'] = data['result'].map(lambda x: x.lstrip('+-').rstrip('ABCDE'))

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

df['result'] = df['result'].str.replace(r'\D', '')
df

    time result
1  01:00     52
2  02:00     62
3  03:00     72
4  04:00     82
5  05:00     92

 

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

  • 0

ليكن لدينا الفريم التالي:

import pandas as pd
#Map
df = pd.DataFrame({'time':['09:00','10:00','11:00','12:00','13:00'], 'result':['+52A','+62B','+44a','+30b','-110a']})
df
"""
time 	result
0 	09:00 	+52A
1 	10:00 	+62B
2 	11:00 	+44a
3 	12:00 	+30b
4 	13:00 	-110a
"""
  1. استخدام التعابير المنطقية والدالة re.sub و re.compile من مكتبة regex:
    import re
    df['result'] = [re.compile(r'\D').sub('', x) for x in df['result']]
    df
    """
    time 	result
    0 	09:00 	52
    1 	10:00 	62
    2 	11:00 	44
    3 	12:00 	30
    4 	13:00 	110
    """
    # يفضل كتابة التعبير المنتظم مسبقاُ لتجنب الحسابات المكررة 
    reg=re.compile(r'\D')
    df['result'] = [reg.sub('', x) for x in df['result']]

    كما ويمكنك استخدام الدالة re.search بدلاً من re.sub:

    reg = re.compile(r'\d+')
    df['result'] = [reg.search(x)[0] for x in df['result']]

     

  2. استخدام الدالة lstrip:
    df['result'] = [x.lstrip('+-').rstrip('aAbBcC') for x in df['result']]
    df
    """
    time 	result
    0 	09:00 	52
    1 	10:00 	62
    2 	11:00 	44
    3 	12:00 	30
    4 	13:00 	110
    """

     

  3. وإذا كنت تريد حلاً بايثونياً (أقصد بدون توابع مساعدة):
    df['result'] = [x[1:-1] for x in df['result']]

     

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...