Problème sauvegarde doc python

Fermé
Adri - 26 août 2021 à 21:53
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 28 août 2021 à 15:26
Bonjour,
Je tente depuis des heures d'enlever tout ce qui n'est pas un nombre dans le tableau suivant:

Date 2021-08-26
Volume ACA.PA 0.583852
AI.PA 0.642007
AIR.PA 0.506335
ALO.PA 0.872771
ATO.PA 0.423406
BN.PA 0.520893
BNP.PA 0.748225
CA.PA 0.702790

Si je le garde de la sorte il m'est imposible de l'enregistrer en csv dans la forme que je souhaite. Merci de votre aide.

Mon programme:

from numpy.core.fromnumeric import transpose
import yfinance as yf
import csv
import numpy

#on cherche les valeurs
cac40='AI.PA AIR.PA ALO.PA MT.AS ATO.PA CS.PA BNP.PA EN.PA CAP.PA CA.PA ACA.PA BN.PA DSY.PA ENGI.PA EL.PA RMS.PA KER.PA LR.PA OR.PA MC.PA ML.PA ORA.PA RI.PA PUB.PA RNO.PA SAF.PA SGO.PA SAN.PA SU.PA GLE.PA STLA.PA STM.PA TEP.PA HO.PA TTE.PA URW.AS VIE.PA DG.PA VIV.PA WLN.PA'
hist_30_jours = yf.Tickers(cac40).history(period = '30d')
hist_6_mois = yf.Tickers(cac40).history(period = '182d')
hist_1_annee = yf.Tickers(cac40).history(period = '1y')


#Supprime les colonnes inutiles
hist_30_jours = hist_30_jours.drop(columns=["Dividends","Close","High","Stock Splits","Low","Open"])
hist_6_mois = hist_6_mois.drop(columns=["Dividends","Close","High","Stock Splits","Low","Open"])
hist_1_annee = hist_1_annee.drop(columns=["Dividends","Close","High","Stock Splits","Low","Open"])

#Moyenne du volume
hist_30_jours =hist_30_jours.mean()
hist_6_mois = hist_6_mois.mean()
hist_1_annee = hist_1_annee.mean()

#On cherche les volumes du jour
Volume_du_jour = yf.Tickers(cac40).history(period = '1d')
Volume_du_jour = Volume_du_jour.drop(columns=["Dividends","Close","High","Stock Splits","Low","Open"])

#On affiche le résultat
hist_30_jours = numpy.transpose(Volume_du_jour / hist_30_jours)
hist_6_mois = numpy.transpose(Volume_du_jour / hist_6_mois)
hist_1_annee = numpy.transpose(Volume_du_jour /hist_1_annee)
print (hist_30_jours)



Configuration: Windows / Chrome 92.0.4515.159
A voir également:

4 réponses

Bonsoir,

Des heures ? Tant que ça ?

Dans ce genre de cas, on éclate la chaîne par les caractères blancs => str.split.
Ensuite de la liste générée que l'on parcourra dans une simple boucle, on récupère la valeur si c'est une valeur flottante, le plus simple est de donc de tenter de convertir avec float chaque valeur de la liste et choper l'erreur avec une exception, et si pas d'erreur enregistrer les valeurs dans une liste.

Il y a encore plus simple, une expression régulière afin de récupérer les valeurs.

Maintenant pourquoi n'arrives-tu pas à enregistrer tes valeurs dans un csv ? Quel est le problème ?
0
Bonjour,

Ok merci pour le retour, je vais tenter ça ce soir.

J'arrive à les enregistrer mais jamais dans la forme que je souhaite.
Pour résumer mon programme va chercher le volume des valeurs du CAC40 et le divise par la moyenne des volumes sur 1 an, 6 mois et 30 jours.
Je souhaite avoir à la sortie uniquement 3 colonnes avec les chiffres (pas le nom des tickers, pas de dates)

J'ai peut-être vu un peu grand pour mon premier programme.

Et pour confirmer, oui j'y ai passé bien 5 heures dessus hier ...
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
28 août 2021 à 11:08
Bonjour,

Je ne sais pas si ça peut aider, mais à tout hasard ...

enlever tout ce qui n'est pas un nombre :

s1 = 'Volume ACA.PA 0.583852'
s2 = ' '.join([nb for nb in s1 if nb.isdigit()])
print(s2)
0
Bonjour,

Il est évident qu'il veut récupérer les nombres à virgules et non chaque chiffre individuellement, ce qui serait absurde...
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
28 août 2021 à 15:26
s1 = 'Volume ACA.PA 0.583852'

print(re.findall("\d+\.\d+", s1))
0

Discussions similaires