2016-12-15 19 views
5

rozważyć dfjak wypełnić brakujące wartości w krotce

np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.choice([(1, 2), (3, 4), np.nan], (10, 10))) 
df 

enter image description here

jak mam wypełnić te NaN z (0, 0)?


Włożyłam ten siekać razem, ale jestem zakładając, że istnieje bardziej bezpośredni sposób. I to nie działa na pd.Series

df.stack().unstack(fill_value=(0, 0)) 

enter image description here

Odpowiedz

4

Można zrobić z .applymap:

import numpy as np 
import pandas as pd 


np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.choice([(1, 2), (3, 4), np.nan], (10, 10))) 

df.applymap(lambda x: (0,0) if x is np.nan else x) 

To będzie pracować dla pd.Series jeśli używasz apply:

df[0].apply(lambda x: (0, 0) if x is np.nan else x) 
+3

To wygląda całkiem nieźle. Możesz uprościć to do: 'df.applymap (lambda x: (0,0) jeśli x to np.nan else x)' –

+0

@TedPetrou, dzięki za napiwek! – Abdou

1

lubię swoje obejście lepszy niż ten, ale powinno to zadanie.

import pandas as pd 
import numpy as np 

np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.choice([(1, 2), (3, 4), np.nan], (10, 10))) 

idx_arrays = np.where(df.isnull()) 
idx_tups = zip(idx_arrays[0], idx_arrays[1]) 

for tup in idx_tups: 
    df.loc[tup] = (0, 0)