1
votes

trouver une chaîne qui contient une valeur spécifique

Comment puis-je imprimer toutes les dates dans le dataframe (analysées en une chaîne) qui contiennent 2012-06 dans la chaîne

Je ne me souviens pas quel caractère symbolise "ok après moi sont des caractères aléatoires , cette partie n'est pas importante "

Je pensais que c'était (. *) mais ce n'est pas

le but de ceci est de trouver et d'ouvrir tous les CSV des dossiers. alors j'ai pensé que je pourrais m'en tirer avec quelque chose comme ça à la fin: 2012-06 (. *). csv pour ouvrir tous les fichiers de juin 2012 et "faire des choses"

import pandas as pd
from datetime import timedelta

datelist = pd.date_range(pd.datetime(year = 2012, month = 6, day = 15), pd.datetime.today()).tolist()
df = pd.DataFrame(datelist)

for date in df[0]:

  d = str(date)

  if d == "2012-06(.*)":  

    print(d)  


2 commentaires

Donc, fondamentalement, vous recherchez tous les noms de fichiers (chaînes) contenant une autre chaîne? pourquoi pas si votre_chaîne dans votre_nom_fichier: etc. ?


ouais, cela semble la solution la plus simple, merci


3 Réponses :


4
votes

Je suggère d'utiliser Series.str.contains :

print (df1)

            0
0  2012-06-15
1  2012-06-16
2  2012-06-17
3  2012-06-18
4  2012-06-19
5  2012-06-20
6  2012-06-21
7  2012-06-22
8  2012-06-23
9  2012-06-24
10 2012-06-25
11 2012-06-26
12 2012-06-27
13 2012-06-28
14 2012-06-29
15 2012-06-30

Ou Series.str.startswith pour le filtrage dans les pandas:

df1 = df[df[0].astype(str).str.startswith("2012-06")]


0 commentaires

0
votes

Vous pouvez également interroger par année et mois .

import pandas as pd

datelist = pd.date_range(pd.datetime(year = 2012, month = 6, day = 15), pd.datetime.today()).tolist()
df = pd.DataFrame(datelist)
print(df[(df[0].dt.year == 2012) & (df[0].dt.month == 6)])


0 commentaires

1
votes

Vous pouvez utiliser glob ( https://docs.python.org/3/ library / glob.html ) pour utiliser le modèle 2012-06- * .

Par exemple:

Disons que vous avez ces fichiers dans un dossier:

['files/2012-06-15_my_file.csv', 'files/2012-06-01_test.csv']

Vous pouvez faire ceci:

import glob

files = glob.glob('files/2012-06*.csv')
print(files)

Il imprimera:

ls -l files
total 0
-rw-r--r--  1 julien  staff  0 Apr 30 13:57 2012-06-01_test.csv
-rw-r--r--  1 julien  staff  0 Apr 30 13:58 2012-06-15_my_file.csv
-rw-r--r--  1 julien  staff  0 Apr 30 13:58 2013-01-10_my_file.csv

Avec cette liste de fichiers , vous pouvez parcourir et ouvrir chacun d'eux par exemple


2 commentaires

c'est exactement ce que je cherchais .... docs.python.org/ 3 / library / glob.html


Heureux que cela ait aidé :)