2017-03-02 3 views
0

Ich lerne Python mit Beispielen. Vielleicht muss ich die Datenstruktur lernen, um die Funktionen vollständig zu verinnerlichen, aber ich hoffe, dass mir jemand auf dieser Stufe helfen kann.Reinigung von Textdaten mit Python

Jetzt säubere ich Textdaten, die von Pandas Datenrahmen gestapelt werden.

Ich habe das folgende Ergebnis und was ich tun möchte, ist nur die letzten zwei Elemente für jeden geteilten Text zu nehmen.

[['Australian Centre for Ancient DNA', 
    ' School of Biological Sciences', 
    ' University of Adelaide', 
    ' Adelaide', 
    ' South Australia 5005', 
    ' Australia'], 
['Department of Ecology and Evolutionary Biology', 
    ' Ramaley Biology', 
    ' University of Colorado', 
    ' Boulder', 
    ' CO 80309', 
    ' USA']] 

Also, mein Versuch etwas wie

war
df["zip"] = df["Af_split_split"] 
i = 0 
j = 0 
df.iloc[i,7][j] = df.iloc[i,6][j][len(df.iloc[i,6][j])-2:len(df.iloc[i,6][j])-1] 

Allerdings, wenn ich versuchte es, Elemente in einer anderen Spalte in Datenrahmen wurden ebenfalls geändert. (Siehe die erste Zeile von Af_split, Af_split_split, zip haben den gleichen Wert)

Wie kann ich mit diesem Problem umgehen?

enter image description here

Antwort

0

Wenn ich dein Problem richtig verstehe, von den Symptomen Sie beschreiben, ist Ihr Problem ein Klassiker: Sie müssen eine Liste kopieren und die Kopie zu ändern, ohne das Original zu verändern. Dies hat auf Stack-Überlauf bereits beantwortet worden, siehe hier: How to clone or copy a list?

Für Ihr spezifisches Beispiel ist die Lösung, um Ihre Linie zu ändern, in dem Sie zuweisen df [ „zip“] dazu:

df["zip"] = df["Af_split_split"][:] 

That Der Slice-Operator ohne Zahlen erstellt eine neue Kopie der Liste (anstatt einen Zeiger zu erstellen), so dass Änderungen an der Kopie das Original nicht beeinflussen.