2015-10-10 17 views
7

के साथ NaN को प्रतिस्थापित करना मैं पांडा सीखने की कोशिश कर रहा हूं लेकिन मुझे निम्नलिखित के साथ परेशान किया गया है। मैं NaNs को प्रतिस्थापित करना चाहता हूं, औसत औसत के साथ डेटाफ्रेम है। इसलिए df.fillna(df.mean(axis=1)) जैसे कुछ काम करना चाहिए लेकिन किसी कारण से यह मेरे लिए विफल रहता है। क्या मुझे कुछ याद आ रहा है, कुछ मैं गलत कर रहा हूँ? ऐसा इसलिए है क्योंकि इसे लागू नहीं किया गया है; देख link hereपांडस डेटाफ्रेम: पंक्ति औसत

import pandas as pd 
import numpy as np 
​ 
pd.__version__ 
Out[44]: 
'0.15.2' 

In [45]: 
df = pd.DataFrame() 
df['c1'] = [1, 2, 3] 
df['c2'] = [4, 5, 6] 
df['c3'] = [7, np.nan, 9] 
df 

Out[45]: 
    c1 c2 c3 
0 1 4 7 
1 2 5 NaN 
2 3 6 9 

In [46]: 
df.fillna(df.mean(axis=1)) 

Out[46]: 
    c1 c2 c3 
0 1 4 7 
1 2 5 NaN 
2 3 6 9 

हालांकि कुछ इस तरह ठीक

df.fillna(df.mean(axis=0)) 

Out[47]: 
    c1 c2 c3 
0 1 4 7 
1 2 5 8 
2 3 6 9 
+3

कि कार्यक्षमता अभी भी लागू नहीं है उपज - [मुद्दा खुला रहता है] (https://github.com/pydata/pandas/issues/4514)। –

+0

ठीक है, इसके लिए धन्यवाद! – Aenaon

उत्तर

12

के रूप में टिप्पणी की fillna को अक्ष तर्क NotImplemented है काम करने के लिए लग रहा है।

df.fillna(df.mean(axis=1), axis=1) 

नोट: के रूप में आप वें पंक्ति औसत के साथ अपने वें कॉलम को भरने के लिए नहीं करना चाहते हैं यह यहां महत्वपूर्ण होगा।

अभी के लिए आप के माध्यम से पुनरावृति करना होगा:

In [11]: m = df.mean(axis=1) 
     for i, col in enumerate(df): 
      # using i allows for duplicate columns 
      # inplace *may* not always work here, so IMO the next line is preferred 
      # df.iloc[:, i].fillna(m, inplace=True) 
      df.iloc[:, i] = df.iloc[:, i].fillna(m) 

In [12]: df 
Out[12]: 
    c1 c2 c3 
0 1 4 7.0 
1 2 5 3.5 
2 3 6 9.0 

एक वैकल्पिक पक्षांतरित fillna और फिर स्थानांतरित, और अधिक कुशल हो सकता है जो है ...

df.T.fillna(df.mean(axis=1)).T 
+0

धन्यवाद एंडी, अच्छा जवाब – Aenaon

1

एक के रूप में वैकल्पिक, आप apply का उपयोग lambda अभिव्यक्ति के साथ भी कर सकते हैं:

df.apply(lambda row: row.fillna(row.mean()), axis=1) 

भी

c1 c2 c3 
0 1.0 4.0 7.0 
1 2.0 5.0 3.5 
2 3.0 6.0 9.0 
संबंधित मुद्दे