[FIXED] Wie konvertiere ich jedes Element einer Pandas-Serie in eine separate Spalte eines vorhandenen Datenrahmens (Python)?

Ausgabe

Ich arbeite mit einem Pandas-Datenrahmen, der 2 Spalten, eine Eigenschafts-ID-Variable (‘listingid’) und die entsprechende Adresse der Eigenschaft (‘address’) hat. Ich habe einen Adressparser (Straßenadresse) verwendet, um jede Adresse zu analysieren, und die resultierende Ausgabe ist eine Pandas-Serie für jede Adresse und wird unter einer anderen Variablen namens “parsed” gespeichert. Nachfolgend finden Sie ein Beispiel dafür, was ich meine:-

Auflistungs-ID die Anschrift geparst
1 570 WOODBOROUGH ROAD NG3 5FH ‘Haus’:’570′ ‘Straßenname’: ‘WOODBOROUGH’ ‘Postleitzahl’: ‘NG3 5FH’
2 LEOMINSTER BUSINESS PLC NG3 5FG ‘Haus’: ‘Keine’ ‘Straßenname’: ‘LEOMINSTER BUSINESS PLC’ ‘Postleitzahl’: ‘NG3 5FG’

Meine Frage ist: Kann ich die als “Haus”, “Straßenname” und “Postleitzahl” aufgeführten Komponenten extrahieren und als drei separate Variablen im selben Datenrahmen speichern? Was ich am Ende möchte, ist Folgendes: –

Auflistungs-ID die Anschrift hnr Straße Postleitzahl
1 570 WOODBOROUGH ROAD NG3 5FH 570 WOODBOROUGH NG35FH
2 LEOMINSTER BUSINESS PLC NG3 5FG Keiner LEOMINSTER BUSINESS PLC NG3 5FG

Im Wesentlichen ist also jede Zeile in meinem Datenrahmen eine Pandas-Serie, die die verschiedenen geparsten Elemente einer Straßenadresse enthält, und ich möchte die einzelnen Komponenten extrahieren und sie in Spalten im vorhandenen Datenrahmen konvertieren.

Die Aufteilung der Adresse in ihre Bestandteile oder die Verwendung regulärer Ausdrücke ist in meinem Fall nicht möglich, da viele Adressen unregelmäßig oder eindeutig formatiert sind und der von mir gefundene Adressparser die verschiedenen Komponenten der Adresse recht gut identifiziert hat.

Sehr neu in Python, also entschuldigen Sie, wenn dies eine grundlegende Frage ist, und geben Sie bei Bedarf gerne weitere Erläuterungen!

Lösung

Hier ist ein Vorschlag mit einer klassischen Zeichenfolgentransformation und pandas.concat:

df_parsed = (
                df['parsed'].str.replace(' ', '')
                            .str.replace("''", ',')
                            .str.replace("'", "")
                            .str.split(",")
                            .explode()
                            .str.split(':', expand=True)
                            .pivot(columns=0, values=1)
            )

out = (
        pd.concat([df, df_parsed], axis=1)
          .rename(columns={'house': 'hno', 'streetname': 'street'})
          .drop(columns='parsed')
      )

# Ausgabe :

print(out)

   listingid                          address   hno postcode                 street
0          1     570 WOODBOROUGH ROAD NG3 5FH   570   NG35FH            WOODBOROUGH
1          2  LEOMINSTER BUSINESS PLC NG3 5FG  None   NG35FG  LEOMINSTERBUSINESSPLC


Beantwortet von –
M92_


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like