2017-10-01 4 views
1

I Datenrahmen haben und es gibt NaN Werte:Pandas: fillna alle Spalten mit einem Wert

col1 col2 col3 
234 NaN  1 
NaN NaN  18 
9  2  NaN 

Ich habe die Liste mit den Werten [12, 15, 3] und ich brauche diese Spalten zu füllen:

Wunsch Ausgang

col1 col2 col3 
234 15  1 
12  15  18 
9  2  3 

ich kann es mit

for (col, mean) in zip(df.columns, means): 
    df[col].fillna(mean, inplace=True) 

Aber ist es möglich, es ohne Schleife zu machen?

Antwort

3

Bauen Sie ein dict von denen, dann fillna

l1= [12, 15, 3] 

df.fillna(dict(zip(df.columns,l1))) 
Out[120]: 
    col1 col2 col3 
0 234.0 15.0 1.0 
1 12.0 15.0 18.0 
2 9.0 2.0 3.0 
+1

Das ist eine gute Antwort, aber ich würde es wahrscheinlich in ein paar Zeilen teilen. Jedenfalls +1 –

2

Sie können Ihre Liste in ein Wörterbuch konvertieren und ein Wörterbuch als Argument geben fillna:

df.fillna({'col1': 12,'col2': 15, 'col3':3}, inplace=True) 
3

Noch ein anderer Ansatz:

df.fillna(pd.Series([12, 15, 3], index=df.columns)) 

Es sieht so aus, als ob Sie den Mittelwert jeder Spalte (?) Wollen, in diesem Fall yo u konnte einfach tun:

df.fillna(df.mean())  # df.mean() returns a series 

In jedem Fall ist der Schlüssel zu dieser Antwort und die andere gerade ist eine Art von markiertem Ausgang fillna zu geben. Hier verwende ich eine Reihe, während die anderen Antworten Wörterbücher verwenden. Jeder Ansatz ist natürlich gut, hängt nur davon ab, was für Sie bequemer ist.

Verwandte Themen