nasıl

2016-12-15 20 views
5

nasıl (0, 0) olanlar NaN doldurmak yok dfnasıl

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

enter image description here

düşünün Tuple ile eksik değerleri doldurmak için?


Bu arada kesmek koyduk ama daha doğrudan bir yolu vardır varsayıyorum. Ve bu Bundan daha iyi senin geçici çözümü gibi bir pd.Series

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

enter image description here

cevap

4

Sen .applymap ile yapabilirsiniz: Eğer apply kullanırsanız

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) 

Bu pd.Series için çalışacaktır:

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

Bu oldukça iyi görünüyor. Bunu basitleştirebilirsiniz: 'df.applymap (lambda x: (0,0) x ise np.nan başka x)' –

+0

@TedPetrou, bahşiş için teşekkürler! – Abdou

1

için çalışmaz, ama bu işi olmalıdır.

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)