Conversion string en float64 autorisée individuellement mais pas en loupe

a marqué ce sujet comme résolu.

Bonjour,

Je rencontre un problème bien étrange en tentant de convertir le type des string des données d’un ensemble pandas.Series en type float64. Lorsque je travaille en boucle for j’ai une erreur ValueError tandis que lorsque je travaille individuellement tout se passe bien. Le code est le suivant :

for i in range(len(countries)):
        df = pd.read_csv("Spreads\\"+countries[i]+".csv")
        df = df.iloc[6:, :]
        df = df.reindex(index = df.index[::-1])
        indexes = list(df.index)
        for date in indexes:
            if "1998" in date:
                break
            df = df.drop(date)

        spread_series = df.iloc[:, 0]
        spread_series = spread_series.reset_index(drop = True)
        spread_series = spread_series.astype('float64')

countries est une juste liste contenant des noms de pays. Avec cette boucle j’ai le problème suivant en utilisant .astype() : ValueError: could not convert string to float: '-' et lorsque j’utilise .tonumeric() à la place de .astype() j’ai l’erreur suivante : ValueError: Unable to parse string "-" at position 210. A la position 210 de la série j’ai : 1.80 (en string initialement). Je ne vois pas d’où il sort le "-". Sinon lorsque je tente individuellement pays par pays alors les deux méthodes marchent et je n’ai aucune erreur.

J’aimerais vous demander si quelqu’un a une idée d’où vient le problème et comment le résoudre.

Merci d’avance.

Salut,

Si ton problème se produit uniquement lorsque tu met en place la boucle sur les countries alors le problème vient sûrement d’un de tes fichiers csv !

Parce que tu nous donnes la chaine à la position 210, mais dans quel fichier ? Il faudrait rajouter un print de debug pour savoir dans quel fichier csv se produit l’erreur.

Et sinon, plutôt que de faire une boucle for sur un range de la taille de ta liste et devoir ensuite utiliser un index, tu devrais directement faire : for country in countries. Les performances seraient meilleures et c’est plus lisible !

+0 -0

Bonjour,

Merci pour votre réponse. Vous avez bien raison. Tout à l’heure la boucle faisait partie d’un code plus grand avec plusieurs sorties et je m’étais perdu même en rajoutant des print pour voir où se trouve l’erreur. Du coup c’était bien dans un pays de countries qui avait juste une valeur "-" à la position 210. Merci pour le conseil pour la bonne utilisation de l’itérateur aussi !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte