J'ai un dataframe, df, qui a quelques colonnes de type float64, tandis que les autres sont d'objet. En raison de la nature mixte, je ne peux pas utiliser
df.fillna('unknown') #getting error "ValueError: could not convert string to float:"
car l'erreur s'est produite avec les colonnes dont le type est float64 (quel message d'erreur trompeur!)
donc j'aimerais pouvoir faire quelque chose comme
for col in df.columns[<dtype == object>]:
df[col] = df[col].fillna("unknown")
Donc, ma question est de savoir s'il existe une telle expression de filtre que je peux utiliser avec df.columns?
Je suppose alternativement, moins élégamment, je pourrais faire:
for col in df.columns:
if (df[col].dtype == dtype('O')): # for object type
df[col] = df[col].fillna('')
# still puzzled, only empty string works as replacement, 'unknown' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0"
Je voudrais également savoir pourquoi dans le code ci-dessus remplaçant '' par 'inconnu', le code fonctionnerait pour certaines cellules mais a échoué avec une cellule avec l'erreur "ValueError: Erreur lors de l'analyse de la chaîne datetime" inconnu "à la position 0"
Merci beaucoup!
Yu
Vous pouvez voir quel est le dtype pour toutes les colonnes en utilisant l'attribut dtypes:
In [11]: df = pd.DataFrame([[1, 'a', 2.]])
In [12]: df
Out[12]:
0 1 2
0 1 a 2
In [13]: df.dtypes
Out[13]:
0 int64
1 object
2 float64
dtype: object
In [14]: df.dtypes == object
Out[14]:
0 False
1 True
2 False
dtype: bool
Pour accéder aux colonnes d'objets:
In [15]: df.loc[:, df.dtypes == object]
Out[15]:
1
0 a
Je pense que c'est plus explicite à utiliser (je ne suis pas sûr que inplace fonctionnerait ici):
In [16]: df.loc[:, df.dtypes == object] = df.loc[:, df.dtypes == object].fillna('')
Cela dit, je vous recommande d'utiliser NaN pour les données manquantes .
C'est concis:
# select the float columns
df_num = df.select_dtypes(include=[np.float])
# select non-numeric columns
df_num = df.select_dtypes(exclude=[np.number])