2016-07-10 7 views
3

Ich habe eine viele Zeile, viele Spalte Datenrahmen mit verschiedenen 'Platzhalter' Werte benötigen Substitution (in einer Teilmenge von Spalten). Ich habe viele Beispiele im Forum mit verschachtelten Listen oder Wörter lesen, haben aber kein Glück mit Variationen hatte ..Pandas: Liste der Werte aus der Liste der Spalten ersetzen

# A test dataframe 
df = pd.DataFrame({'Sample':['alpha','beta','gamma','delta','epsilon'], 
        'element1':[1,-0.01,-5000,1,-2000], 
        'element2':[1,1,1,-5000,2], 
        'element3':[-5000,1,1,-0.02,2]}) 

# List of headings containing values to replace 
headings = ['element1', 'element2', 'element3'] 

Und ich versuche, so etwas zu tun (natürlich funktioniert dies nicht):

Also, gibt es möglicherweise einen besseren Weg, um dies mit Loops oder Fancy Pandas Tricks zu erreichen?

Antwort

1

Hier ist die erfolgreiche Antwort wie von @Psidom.

Die Lösung beinhaltet aus dem Datenrahmen ein Stück nehmen, Anwendung der Funktion, dann reincorporates den geänderten Scheibe:

df1 = df.loc[:, headings] 
df1[df1 < -1] = np.nan 
df1[(df1 < 0)] = 0.05 
df.loc[:, headings] = df1 
3

Sie können die Sample Spalte als Index und dann Werte auf dem gesamten Datenrahmen ersetzen, basierend auf Bedingungen:

df = df.set_index('Sample') 
df[df < -1] = np.nan 
df[(df < 0) & (df > -1)] = 0.05 

Welche gibt:

#   element1 element2 element3 
# Sample   
# alpha  1.00  1.0   NaN 
# beta  0.05  1.0   1.00 
# gamma  NaN  1.0   1.00 
# delta  1.00  NaN   0.05 
# epsilon  NaN  2.0   2.00 
+0

Vielen Dank für die Führung @Psidom! Die Komplexität besteht darin, dass ich Dutzende von Spalten habe und nur etwa zwei Drittel die Funktion benötigen. – Shawn

+1

Wäre so etwas am besten? 'df [df.loc [:, (Überschriften)] <-1] = np.nan' – Shawn

+0

Das ist ein guter Haken. Ich dachte nicht einmal, dass das funktionieren würde, da der Index eine andere Dimension als der ursprüngliche Datenrahmen hat. Aber offensichtlich tut es das. – Psidom