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 :

Ajout d'une colonne à un DataFrame existant et le résultat donne des NaN! [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut Ajout d'une colonne à un DataFrame existant et le résultat donne des NaN!
    Bonjour,

    Je dispose d'un DataFrame avec deux colonnes existantes (market et stock):

    daily_returns
    Out[98]:
    market stock
    Date
    2017-08-03 00:00:00-04:00 NaN NaN
    2017-08-04 00:00:00-04:00 0.182193 0.527114
    2017-08-07 00:00:00-04:00 0.185942 1.547394
    2017-08-08 00:00:00-04:00 -0.246112 0.799692
    2017-08-09 00:00:00-04:00 -0.004040 0.612226
    ... ...
    2022-08-01 00:00:00-04:00 -0.296108 -0.615345
    2022-08-02 00:00:00-04:00 -0.659746 -0.928756
    2022-08-03 00:00:00-04:00 1.565946 3.824778
    2022-08-04 00:00:00-04:00 -0.067540 -0.192626
    2022-08-05 00:00:00-04:00 -0.169029 -0.138897

    [1261 rows x 2 columns]

    J'exécute la commande suivante pour y ajouter une autre colonne (riskfree):

    daily_returns['riskfree'] = (1 + riskfree_rate['Close']) ** (1/360) - 1

    J'obtiens le résultat suivant (market, stock et riskfree):

    daily_returns
    Out[100]:
    market stock riskfree
    Date
    2017-08-03 00:00:00-04:00 NaN NaN NaN
    2017-08-04 00:00:00-04:00 0.182193 0.527114 NaN
    2017-08-07 00:00:00-04:00 0.185942 1.547394 NaN
    2017-08-08 00:00:00-04:00 -0.246112 0.799692 NaN
    2017-08-09 00:00:00-04:00 -0.004040 0.612226 NaN
    ... ... ...
    2022-08-01 00:00:00-04:00 -0.296108 -0.615345 NaN
    2022-08-02 00:00:00-04:00 -0.659746 -0.928756 NaN
    2022-08-03 00:00:00-04:00 1.565946 3.824778 NaN
    2022-08-04 00:00:00-04:00 -0.067540 -0.192626 NaN
    2022-08-05 00:00:00-04:00 -0.169029 -0.138897 NaN

    [1261 rows x 3 columns]

    Si j'exécute les calculs à droite de l'équation je devrais normalement obtenir cette colonne et non pas des NaN:

    (1 + riskfree_rate['Close']) ** (1/360) - 1
    Out[101]:
    Date
    2017-08-03 00:00:00-05:00 0.003260
    2017-08-04 00:00:00-05:00 0.003294
    2017-08-07 00:00:00-05:00 0.003285
    2017-08-08 00:00:00-05:00 0.003308
    2017-08-09 00:00:00-05:00 0.003272

    2022-08-01 00:00:00-05:00 0.003569
    2022-08-02 00:00:00-05:00 0.003672
    2022-08-03 00:00:00-05:00 0.003677
    2022-08-04 00:00:00-05:00 0.003623
    2022-08-05 00:00:00-05:00 0.003744
    Name: Close, Length: 1261, dtype: float64

    Je n'y comprend rien; les index sont les mêmes, le nombre de rangées est le même....sauf le dtype
    Je n'arrive pas à trouver la solution.
    Merci pour votre aide.

    Jacques

  2. #2
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut Solution
    Citation Envoyé par Jack_dev Voir le message
    Bonjour,

    Je dispose d'un DataFrame avec deux colonnes existantes (market et stock):

    daily_returns
    Out[98]:
    market stock
    Date
    2017-08-03 00:00:00-04:00 NaN NaN
    2017-08-04 00:00:00-04:00 0.182193 0.527114
    2017-08-07 00:00:00-04:00 0.185942 1.547394
    2017-08-08 00:00:00-04:00 -0.246112 0.799692
    2017-08-09 00:00:00-04:00 -0.004040 0.612226
    ... ...
    2022-08-01 00:00:00-04:00 -0.296108 -0.615345
    2022-08-02 00:00:00-04:00 -0.659746 -0.928756
    2022-08-03 00:00:00-04:00 1.565946 3.824778
    2022-08-04 00:00:00-04:00 -0.067540 -0.192626
    2022-08-05 00:00:00-04:00 -0.169029 -0.138897

    [1261 rows x 2 columns]

    J'exécute la commande suivante pour y ajouter une autre colonne (riskfree):

    daily_returns['riskfree'] = (1 + riskfree_rate['Close']) ** (1/360) - 1

    J'obtiens le résultat suivant (market, stock et riskfree):

    daily_returns
    Out[100]:
    market stock riskfree
    Date
    2017-08-03 00:00:00-04:00 NaN NaN NaN
    2017-08-04 00:00:00-04:00 0.182193 0.527114 NaN
    2017-08-07 00:00:00-04:00 0.185942 1.547394 NaN
    2017-08-08 00:00:00-04:00 -0.246112 0.799692 NaN
    2017-08-09 00:00:00-04:00 -0.004040 0.612226 NaN
    ... ... ...
    2022-08-01 00:00:00-04:00 -0.296108 -0.615345 NaN
    2022-08-02 00:00:00-04:00 -0.659746 -0.928756 NaN
    2022-08-03 00:00:00-04:00 1.565946 3.824778 NaN
    2022-08-04 00:00:00-04:00 -0.067540 -0.192626 NaN
    2022-08-05 00:00:00-04:00 -0.169029 -0.138897 NaN

    [1261 rows x 3 columns]

    Si j'exécute les calculs à droite de l'équation je devrais normalement obtenir cette colonne et non pas des NaN:

    (1 + riskfree_rate['Close']) ** (1/360) - 1
    Out[101]:
    Date
    2017-08-03 00:00:00-05:00 0.003260
    2017-08-04 00:00:00-05:00 0.003294
    2017-08-07 00:00:00-05:00 0.003285
    2017-08-08 00:00:00-05:00 0.003308
    2017-08-09 00:00:00-05:00 0.003272

    2022-08-01 00:00:00-05:00 0.003569
    2022-08-02 00:00:00-05:00 0.003672
    2022-08-03 00:00:00-05:00 0.003677
    2022-08-04 00:00:00-05:00 0.003623
    2022-08-05 00:00:00-05:00 0.003744
    Name: Close, Length: 1261, dtype: float64

    Je n'y comprend rien; les index sont les mêmes, le nombre de rangées est le même....sauf le dtype
    Je n'arrive pas à trouver la solution.
    Merci pour votre aide.

    Jacques
    J'ai finalement résolu avec le code suivant:

    mydata = (1 + riskfree_rate['Close']) ** (1/360) - 1
    mydata.index = daily_returns.index
    daily_returns['riskfree'] = mydata

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    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 760
    Par défaut
    Citation Envoyé par Jack_dev Voir le message
    J'ai finalement résolu
    Vous utilisez la date comme index et ces dates ne correspondent pas!
    Regardez votre premier ligne 2017-08-03 00:00:00-04:00, comparez à a première ligne de (1 + riskfree_rate['Close']) ** (1/360) - 1: 2017-08-03 00:00:00-05:00
    Effectivement virer les index supprimera les NaN puisqu'on ne cherchera plus à mettre en relations les lignes en fonction de leur index mais de leur position...
    Dans ce cas, pourquoi avoir voulu utiliser l'horodatage comme index ?

    Si vous ne savez pas répondre à cette question, vous avez bricolé un truc qui peut avoir crée un autre problème côté cohérence des données.

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

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

Discussions similaires

  1. Ajout d'une colonne automatiquement suivant date
    Par paflolo dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 17h51
  2. [Access 97] Ajout d'une colonne selon la date...
    Par paflolo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2006, 16h50
  3. Réponses: 7
    Dernier message: 01/03/2006, 18h14
  4. pb d'ajout d'une colonne dans un report
    Par khlh dans le forum Oracle
    Réponses: 3
    Dernier message: 06/10/2005, 17h12
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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