2017-09-22 2 views

Répondre

1

J'essaie de simuler votre problème:

df = pd.DataFrame({'A':['1','3','4'], 
        'B':['5','6','3'], 
        'E':['3','4', 3]}) 

print (df) 
    A B E 
0 1 5 3 
1 3 6 4 
2 4 3 3 

a = df.max(axis=1) 
print (a) 
0 NaN 
1 NaN 
2 NaN 
dtype: float64 

Cela signifie que vos données sont mélangées - numérique avec des chaînes.

solution est de convertir toutes les données numériques:

a = df.astype(int).max(axis=1) 
print (a) 
0 5 
1 6 
2 4 
dtype: int32 

Parfois, il est pas possible, parce que les données non numériques:

df = pd.DataFrame({'A':['rr','3','4'], 
        'B':['5','6','3'], 
        'E':['3','4', 3]}) 

print (df) 
    A B E 
0 rr 5 3 
1 3 6 4 
2 4 3 3 

a = df.astype(int).max(axis=1) 

ValueError: invalid literal for int() with base 10: 'rr'

Ensuite est l'utilisation possible to_numeric:

a = df.apply(lambda x: pd.to_numeric(x, errors='coerce')) 
print (a) 
    A B E 
0 NaN 5 3 
1 3.0 6 4 
2 4.0 3 3 

a = df.apply(lambda x: pd.to_numeric(x, errors='coerce')).max(axis=1) 
print (a) 
0 5.0 
1 6.0 
2 4.0 
dtype: float64 
0

S'il s'agit bien d'une série et non d'une base de données, la méthode max devrait fonctionner sans aucun argument.

s = pd.Series({'a' : 0., 'b' : 1., 'c' : 2.}) 
s.max() 

> 2 

Êtes-vous sûr de ne pas avoir affaire à une base de données?

+0

C'est une série mais j'ai pris un examen plus approfondi de la base de données d'origine et il existe de nombreuses lignes avec des valeurs 'n.d.' Je suppose que le plus gros problème serait de traiter ces lignes. Des suggestions sur comment ignorer ou ignorer ces lignes ou devrais-je poster une nouvelle question sur SO? –

+0

Quel est le dtype de la série et sont "n.d." chaîne ? –