2015-10-10 12 views
7

Próbuję się nauczyć pand, ale jestem zaintrygowany poniższymi pytaniami. Chcę zastąpić NaNs jest ramką danych ze średnią wiersza. Stąd coś takiego, jak df.fillna(df.mean(axis=1)) powinno działać, ale z jakiegoś powodu mi się nie uda. Czy brakuje mi czegoś, coś, co robię źle? Jest tak, ponieważ nie jest zaimplementowany; zobacz link hereDataFame Pandy: Zastępowanie NaN średnicą rzędu

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 

Jednak coś takiego wygląda działać dobrze

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

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

Funkcjonalność nie jest jeszcze wykonane - [problem pozostaje otwarty] (https://github.com/pydata/pandas/issues/4514). –

+0

OK, dziękuję za to! – Aenaon

Odpowiedz

12

Jak skomentował argument oś fillna jest NotImplemented.

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

Uwaga: to będzie krytyczny tutaj jak nie chcesz wypełnić swoimi uruchamianych n kolumn ze średnią n-tego wiersza.

Teraz trzeba wykonać iterację:

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 

Alternatywą jest fillna transpozycję a następnie transpozycji, które mogą być bardziej wydajne ...

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

Dzięki Andy, miła odpowiedź – Aenaon

1

Jako alternatywnie, można również użyć parametru apply z wyrażeniem lambda w następujący sposób:

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

otrzymując również

c1 c2 c3 
0 1.0 4.0 7.0 
1 2.0 5.0 3.5 
2 3.0 6.0 9.0 
Powiązane problemy