2017-11-29 26 views
0

Ich habe pyspark Datenrahmen, in dem eines der Felder Werte innerhalb %% .. %% eingeschlossen hat. Die enthaltenen Inhalte bestehen nicht aus dem Einzelfall. Ich möchte sie in Kleinbuchstaben umwandeln.Konvertieren String in %% in Kleinbuchstaben in Python

Unten ist ein Schnappschuss des Datenrahmens. enter image description here

Der Text in der Spalte sieht wie folgt aus

https://www.xxxxxxxx.co.nz/Activities|http://www.xxxxxxxx.co.nz/things-to-do/search?location=%%t.Trip_Intrip_1_dest_City_1%% 

https://images.trvl-media.com/media/content/expus/email/2016/us/banner/images/image_stor-34461_09_600x250.jpg|%%mis_lx_Offers_mod_Images.LargeImageURL%% 

ich den obigen Text in das folgende Format konvertieren möchten:

https://www.xxxxxxxx.co.nz/Activities|http://www.xxxxxxxx.co.nz/things-to-do/search?location=%%t.trip_intrip_1_dest_city_1%% 

https://images.trvl-media.com/media/content/expus/email/2016/us/banner/images/image_stor-34461_09_600x250.jpg|%%mis_lx_offers_mod_images.largeimageurl%% 

Nur die Zeichenfolge mit %% konvertiert werden sollen, eingeschlossen zu Kleinbuchstaben

+0

Der Text 'LargeImageUrl' ist immer noch nicht alle unteren Kappen in Ihrer Frage – theBrainyGeek

+0

Können Sie nicht es nicht Karte und eine' .split ("%%") '' dann .unterhalb tun() '? – 16num

+0

@theBrainyGeek Sorry, das war ein Tippfehler. Machte die Änderung. Vielen Dank. – Yuvaraj

Antwort

2

Da Zeichenfolgen in Python unveränderlich sind, müssen Sie den neuen Wert neu zuweisen. Daher denke ich, dass Sie besser dran sind, wenn Sie nur die Zeichenfolge durchlaufen (da Sie in Kommentaren sagen, dass Sie vermeiden möchten, dass split). Ich dachte so etwas wie dieses

new='' 
f=0 
for i in textstr: 
    if i == '%': 
     f += 1 
    if (f/2)%2 == 1: 
     new+=i.lower() 
    else: 
     new+=i 

Oder gehen Sie mit regex

2

Sie einen einfachen regulären Ausdruck verwenden:

  • alle Sequenzen finden ersetzt werden
  • jede Sequenz ersetzen mit ihren Kleinbuchstabenäquivalent

import re 

link1 = 'https://images.trvl-media.com/media/content/expus/email/2016/us/banner/images/image_stor-34461_09_600x250.jpg|%%mis_lx_Offers_mod_Images.LargeImageURL%%' 
link2 = 'https://www.xxxxxxxx.co.nz/Activities|http://www.xxxxxxxx.co.nz/things-to-do/search?location=%%t.Trip_Intrip_1_dest_City_1%%' 
links = [link1, link2] 

for idx, link in enumerate(links): 
    lowers = re.findall(r'%%.*?%%', link) 
    for x in lowers: 
     links[idx] = re.sub(r'%%.*?%%', x.lower(), link) 

for link in links: 
    print(link) 

Ausgang:

https://images.trvl-media.com/media/content/expus/email/2016/us/banner/images/image_stor-34461_09_600x250.jpg|%%mis_lx_offers_mod_images.largeimageurl%% 
https://www.xxxxxxxx.co.nz/Activities|http://www.xxxxxxxx.co.nz/things-to-do/search?location=%%t.trip_intrip_1_dest_city_1%% 
+0

danke. Ich habe Ihren Ansatz versucht und es funktioniert, wenn es nur 1 %% eingeschlossene Zeichenfolge gibt. Aber wenn es 2 gibt wie "%% mis_lx_Offers_mod_Images.LargeImageURL %% | https: //www.xxxxxxxx.co.nz/Aktivitäten | http: //www.xxxxxxxx.co.nz/things-to-do/search? location = %% t.Trip_Intrip_1_dest_City_1 %% 'Wiederholt den letzten Wert in der Schleife. Ausgabe wird: '| %% t.trip_intrip_1_dest_city_1 %% | https: //www.xxxxxxxx.co.nz/Aktivitäten | http: //www.xxxxxxxx.co.nz/things-to-do/search?location=% % t.trip_intrip_1_dest_city_1 %% ' – Yuvaraj

0

die Regex Verwendung von @mentalita vorgeschlagen

input_df:

>>> df.show(truncate=False) 
+----+---------------------------------+ 
|col1|col2        | 
+----+---------------------------------+ 
|1 |http://%%FOO%%|some_string%%BAR%%| 
|2 |http://%%FOO%%|some_string  | 
+----+---------------------------------+ 

Code:

def convert_to_lower(link): 
    target_strings = re.findall(r'%%.*?%%', link) 
    for x in target_strings: 
      link = re.sub(x, x.lower(), link) 
    return link 

convert_to_lower_udf = F.udf(lambda x: convert_to_lower(x)) 
df = df\ 
    .withColumn('converted_strings', convert_to_lower_udf('col2')) 

output_df:

>>> df.show(truncate=False) 
+----+---------------------------------+---------------------------------+ 
|col1|col2        |converted_strings    | 
+----+---------------------------------+---------------------------------+ 
|1 |http://%%FOO%%|some_string%%BAR%%|http://%%foo%%|some_string%%bar%%| 
|2 |http://%%FOO%%|some_string  |http://%%foo%%|some_string  | 
+----+---------------------------------+---------------------------------+ 
Verwandte Themen