إزالة المسافة بين أرقام سلسلة

لدي إطار بيانات يحتوي على بعض المسافات في أحد قيم العمود الخاصة به ("عنوان" العمود). فمثلا: ['2 ، 47 ، Philiproad ، لندن ، المملكة المتحدة ، '12 4 ، نورث هول ، لندن ، المملكة المتحدة']

هناك الآلاف من هذه السجلات في بياناتي. كيف يمكنني إزالة الفراغات betweeb '2' و '47' على سبيل المثال ولديك التالية النتائج باستخدام التعبير العادي:

['247، Philiproad، London، uk'، '124، Northhall، London، uk']

0
شكرا ، راجعت ذلك. للأسف ، يتم إدخال الفضاء عن طريق خطأ المستخدمين ويجب إزالته
وأضاف المؤلف user3665906, مصدر
تأكد من أنك تريد فعلًا ذلك. قد يتم فصل هذه الأرقام لسبب ما. على سبيل المثال ، يمكن أن تكون "2 47" شقة 2 في رقم 47.
وأضاف المؤلف PM 2Ring, مصدر

4 إجابة

يمكنك استبدال المسافات أولاً بدون أي شيء ، ثم إضافة مسافة بعد كل فاصلة. لقد حاولت هذا على النحو التالي:

>>> import re
>>> string1 = '2 47, Philip road, London, uk'
>>> regex = re.compile("(\d )", re.S)
>>> regex.sub(lambda x: x.group()[0].replace(" ", ""), string1)
'247, Philip road, London, uk'
0
وأضاف
شكرا جزيلا. هذا بالضبط ما أنا بعد :)
وأضاف المؤلف user3665906, مصدر
لقد قمت بتحديث إجابتي. EdwinvanMierlo
وأضاف المؤلف pissall, مصدر
من فضلك قل لي ما هو الخطأ.
وأضاف المؤلف pissall, مصدر
اسف هذا خطأي. لقد استخدمت نفس المتغير الذي كنت أستخدمه في جهاز الكمبيوتر الخاص بي. لقد أصلحته.
وأضاف المؤلف pissall, مصدر

لن يتم تعديل New York إلى NewYork

هذا يجب فرز العمود address (هنا أفترض أن dataframe الخاص بك هو df ):

def replace_if_num(s):
    no_spaces = s.replace(' ', '')
    if no_spaces.isdigit():
        return no_spaces
    return s

def foo(s):
    ', '.join(map(replace_if_num, s.split(',')))

df['address'] = df['address'].map(foo)
0
وأضاف
شكرا لكنه يزيل كل المسافات في سلسلتي. هناك بعض العناوين مثل "شمال Philiproad ، 67 8". تعمل هذه الوظيفة على إزالة جميع المسافات وإرجاع "NorthernPhiliproad، 678" غير المرغوبة.
وأضاف المؤلف user3665906, مصدر
@ user3665906 صحيح أنك. غيرت الإجابة لإزالة المسافات فقط من السلاسل الرقمية.
وأضاف المؤلف Eran, مصدر

إجابات جيدة بالفعل ، هنا بديل بدون lambda أو re :

# input list
lst = ['2 47, Philiproad, London, uk', '12 4, Northhall, London, uk']

# remove a space if it exists before the first comma in the element of the lst
result = [a if ' ' not in a.split(',')[0] else a.replace(' ','',1) for a in lst]

print(result)

انتاج:

['247, Philiproad, London, uk', '124, Northhall, London, uk']
0
وأضاف

باستخدام regex :

>>>  [re.sub('(?<=\d)+ (?=\d)+', '', ele) for ele in l]

يستخدم هذا مفهوم lookahead و lookbehind في regex.

وظائف #driver:

IN : ['2 47, Philiproad, London, uk', '12 4, Northhall, London, uk']
OUT : ['247, Philiproad, London, uk', '124, Northhall, London, uk']
0
وأضاف