0
votes

Trancher / diviser certains caractères du nom du fichier CSV

J'utilise la bibliothèque Pandas pour lire 30 fichiers CSV dans le dossier. Voici le nom des fichiers situés dans le dossier "DEG_PVSYST_RUNS" dans le chemin S: / HOME / DEG_PVSYST_RUNS / B>:

Les fichiers sont nommés comme suit: P>

    I am getting output 

    Year as ['00','01'...'30'] and Base as ['Base'.'Base'...'Base']

    Whereas I want output as
    Year as ['0','1',...,'30'] and Base as ['-0.6','-0.3','0',...,'8.4']


3 commentaires

Quel est le problème que vous avez? Veuillez énumérer l'erreur ou reformuler votre question.


@Poojan je viens d'ajouter plus de lignes à la fin pour montrer mon erreur.


Le format et la longueur de votre dossier sont-ils cohérents? Si tel est le cas, vous pouvez utiliser une simple notation de tranche.


3 Réponses :


0
votes

Vous pouvez utiliser la compréhension de la liste pour atteindre ce xxx


1 commentaires

Cette approche fonctionne bien aussi. Préférez-vous cela sur une seule méthode de boucle que j'essayais?



1
votes
  • ici supposant que vous avez besoin d'une année comme int et dégradation comme float .
  • Si vous voulez dégradation sous forme STR simplement retirer l'option de flotteur.
  • Les deux lignes suivantes assument une entrée cohérente comme indiqué dans l'exemple. xxx

2 commentaires

Ce travail extrêmement bien. Est-ce le meilleur moyen d'aller habituellement pour trancher / diviser? Merci pour votre réponse détaillée!


À partir de votre structure de texte d'entrée, vous devez trouver le mieux qui couvre tous les cas. Pour votre cas, vous pouvez dire que c'est une bonne solution. Notez que cela échouera si vous avez un caractère non numérique après _year ou avant % modqal . Dans ce cas, votre logique changera.



1
votes

Utilisez l'approche suivante:

import os
import pandas as pd

years, degradations = [], []
cwd = os.getcwd()
csv_files = [f for f in os.listdir(os.path.join(cwd, 'deg_pvsyst_runs')) if f.endswith('.csv')]

for f in csv_files:
    *name_parts, deg = os.path.basename(f).split('_')
    years.append(int(name_parts[-1].replace('Year', '')))
    degradations.append(deg[:deg.index('%')])

pd.DataFrame({'Year': years, 'Degradation': degradations, 'Folder': csv_files})\
    .to_csv('result.csv', index=False)


0 commentaires