IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Convertir Tableau de caractères en Float


Sujet :

Python

  1. #1
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut Convertir Tableau de caractères en Float
    Bonjour,

    Je sais qu'il y a déjà des questions publiées sur ce sujet mais mais aucune solution n'a l'air de résoudre mon problème.

    J'ai un tableau x de chaîne de caractère défini comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=
    0.58,0.69,0.48
    0.12,0.56,4.59
    J'aimerai convertir ce tableau en float.

    La solution suivante ne fonctionne pasSi quelqu'un a une solution à me proposer, merci d'avance !
    Tchouri vue par Gaia

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> x = ['0.58','0.69','0.48']
    >>> results = [float(i) for i in x]
    >>> print(results)
    [0.58, 0.69, 0.48]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> list(map(float, x))
    [0.58, 0.69, 0.48]

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    "map" va appliquer "float" à un itérable.
    Une chaîne de caractère est un itérable, mais çà va retourner chaque caractère l'un après l'autre. Çà va planter à cause des ".", "," et autres '\n'...
    Il faut donc découper (.split) votre chaîne de caractères en lignes, puis chaque ligne suivant ",". Ceci afin de transformer votre chaîne de caractères en liste de chaînes de caractères représentant des nombres.
    Vous pourrez alors appliquer "float" à chaque élément de cette liste.

    Construire cette liste se ramène à écrire une double boucle... exercice (fort instructif) que je ne ferais pas histoire de ne pas vous gâcher une bonne occasion d'apprendre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    L'exemple que tu donnes n'est pas du tout un tableau de strings.

    Fais un print(x) et copie exactement ce que te sort la console.

    Si ton tableau est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x = [['0.58', '0.69', '0.48'],
        ['0.12', '0.56', '4.59']]
    alors tu peux le convertir comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> x = [['0.58', '0.69', '0.48'],['0.12', '0.56', '4.59']]
    >>> y = [list(map(float, l)) for l in x] 
    >>> y
    [[0.58, 0.69, 0.48], [0.12, 0.56, 4.59]]

  5. #5
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut
    Merci pour les réponses, ce que j'avais écrit dans mon premier message est bien ce qu'affiche ma console lorsque je fais un print(x). En réalité j'ai un tableau un peu plus grand:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0.51732,39.728,12.854,4342.5,38344,12272
    9.3203,-15.365,15.278,11004,-13556,13867
    10.391,-17.862,-8.6988,12414,-16072,-8324.4
    40.854,-38.242,-28.745,51785,-32414,-27366
    La solution en utilisant split:
    donne ce résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['0.51732,39.728,12.854,4342.5,38344,12272', '9.3203,-15.365,15.278,11004,-13556,13867', '10.391,-17.862,-8.6988,12414,-16072,-8324.4', '40.854,-38.242,-28.745,51785,-32414,-27366', '']
    J'ai bien les 4 lignes du tableau que j'aimerai obtenir. Cependant, lorsque j'essaye de séparer les valeurs à l'intérieur de ce deuxième tableau:

    et cette solution
    donne cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'list' object has no attribute 'split'
    Comment faire pour séparer la deuxième liste suivant ',' ?
    Tchouri vue par Gaia

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    moi je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> x='''
    ... 0.51732,39.728,12.854,4342.5,38344,12272
    ... 9.3203,-15.365,15.278,11004,-13556,13867
    ... 10.391,-17.862,-8.6988,12414,-16072,-8324.4
    ... 40.854,-38.242,-28.745,51785,-32414,-27366
    ... '''
    >>> [float(i) for i in x.replace('\n',',').split(',') if i]
    [0.51732, 39.728, 12.854, 4342.5, 38344.0, 12272.0, 9.3203, -15.365, 15.278, 11004.0, -13556.0, 13867.0, 10.391, -17.862, -8.6988, 12414.0, -16072.0, -8324.4, 40.854, -38.242, -28.745, 51785.0, -32414.0, -27366.0]

  7. #7
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Cette solution a l'air intéressante !

    Je vais étudier votre propostion mais n'y a t-il pas un moyen de ne pas perdre le nombre de ligne initial du tableau ?
    Tchouri vue par Gaia

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Linterne Voir le message
    J'ai bien les 4 lignes du tableau que j'aimerai obtenir. Cependant, lorsque j'essaye de séparer les valeurs à l'intérieur de ce deuxième tableau:
    x.split() fabrique une liste de chaînes de caractères: 'list' object has no attribute 'split'.
    Pour appliquer .split(',') à chaque élément de cette liste là, il faut (encore) faire une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for line in x.split():
         for number in line.split(','):
               ....
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Linterne Voir le message
    n'y a t-il pas un moyen de ne pas perdre le nombre de ligne initial du tableau ?
    si, en s'appuyant sur la méthode proposée par VinsS plus haut par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> x='''
    ... 0.51732,39.728,12.854,4342.5,38344,12272
    ... 9.3203,-15.365,15.278,11004,-13556,13867
    ... 10.391,-17.862,-8.6988,12414,-16072,-8324.4
    ... 40.854,-38.242,-28.745,51785,-32414,-27366
    ... '''
    >>> [map(float, i.split(',')) for i in x.split('\n') if i]
    [[0.51732, 39.728, 12.854, 4342.5, 38344.0, 12272.0], [9.3203, -15.365, 15.278, 11004.0, -13556.0, 13867.0], [10.391, -17.862, -8.6988, 12414.0, -16072.0, -8324.4], [40.854, -38.242, -28.745, 51785.0, -32414.0, -27366.0]]

  10. #10
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut
    Merci à tous pour votre aide !

    J'ai réussi à m'en sortir :

    Je convertis mon tableau en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x1=[float(i) for i in x.replace('\n',',').split(',') if i]
    et je reconstruis le tableau en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nbColomnes=4
    nbLignes=6
    i=0
    while i < nbColomnes:
    		x2.append(x1[0+nbLignes*i:nbLignes+nbLignes*i])
    		i+=1
     
    x3=numpy.matrix(x2)
    Merci à tous !
    Tchouri vue par Gaia

  11. #11
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut
    En effet, ta dernière solution est sûrement plus simple !

    Merci encore !!
    Tchouri vue par Gaia

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Linterne Voir le message
    En effet, ta dernière solution est sûrement plus simple !
    Si vous utilisez numpy, le plus simple est de lire le fichier avec np.loadtxt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> print(x)
    0.58,0.69,0.48
    0.12,0.56,4.59
    On met ces données sous la forme d'un "file":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> from io import BytesIO
    >>> z = BytesIO(x)
    Et on demande à numpy de charger les données sous forme de matrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> np.loadtxt(z, dtype=float, delimiter=',')
    array([[ 0.58,  0.69,  0.48],
           [ 0.12,  0.56,  4.59]])
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre habitué Avatar de Linterne
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 164
    Points
    164
    Par défaut
    En effet, cette solution fonctionne parfaitement, merci à tous !
    Tchouri vue par Gaia

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir chaine de caractère en float C#
    Par StephaneCapponi dans le forum C#
    Réponses: 18
    Dernier message: 23/04/2015, 16h57
  2. Réponses: 1
    Dernier message: 25/05/2007, 10h55
  3. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  4. Réponses: 4
    Dernier message: 15/11/2006, 15h14
  5. convertir un tableau de caractère en float
    Par zerocoolyoussef dans le forum C
    Réponses: 3
    Dernier message: 20/03/2006, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo