Trouvez toutes les colonnes de dataframe dans les Pandas dont le type est float, ou un type particulier?
j'ai une base de données, 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:"
comme 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 s'il y a une expression de filtre que je peux utiliser avec df.les colonnes?
je suppose qu'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 aussi savoir pourquoi dans le code ci-dessus remplacer " par "unknown' le code fonctionnerait pour certaines cellules mais échouerait avec une cellule avec l'erreur de "ValueError: Error parsing DateTime string "unknown" à la position 0 "
Merci beaucoup!
Yu
2 réponses
vous pouvez voir ce qu'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 objet:
In [15]: df.loc[:, df.dtypes == object]
Out[15]:
1
0 a
je pense qu'il est le 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('')
en disant que, je vous recommande d'utiliser NaN pour les données manquantes .
ici conciser:
# select the float columns
df_num = df.select_dtypes(include=[np.float])
# select non-numeric columns
df_num = df.select_dtypes(exclude=[np.number])