Comment sélectionner les lignes contenant une sous-chaîne dans une DataFrame Pandas ?

Published: 22 septembre 2023

Tags: Python; Pandas; Dataframe;

DMCA.com Protection Status

Une façon de sélectionner les lignes qui contiennent une sous-chaîne particulière dans une DataFrame Pandas est d'utiliser la méthode str.contains().

Étude de cas.

Considérons la DataFrame suivant.

import pandas as pd
import numpy as np

data = np.array([[47.95, -118.464, '2019-08-07T20:51:25Z'],
       [47.977, -118.606, '2019-08-04T21:36:25Z'],
       [47.916, -118.478, '2019-08-07T22:21:25Z'],
       [48.02, -118.404, '2019-08-07T21:51:25Z'],
       [47.985, -118.449, '2019-08-08T05:56:24Z'],
       [47.949, -118.495, '2019-08-08T22:51:24Z'],
       [47.983, -118.481, '2019-08-05T07:21:25Z'],
       [47.979, -118.575, '2019-08-04T05:11:24Z'],
       [47.986, -118.418, '2019-08-07T10:11:25Z'],
       [48.02, -118.404, '2019-08-09T05:31:25Z']], dtype=object)

df = pd.DataFrame(data,columns=['latitude','longitude', 'observation date/time'])

print(df)

donne

      latitude longitude observation date/time
    0    47.95  -118.464  2019-08-07T20:51:25Z
    1   47.977  -118.606  2019-08-04T21:36:25Z
    2   47.916  -118.478  2019-08-07T22:21:25Z
    3    48.02  -118.404  2019-08-07T21:51:25Z
    4   47.985  -118.449  2019-08-08T05:56:24Z
    5   47.949  -118.495  2019-08-08T22:51:24Z
    6   47.983  -118.481  2019-08-05T07:21:25Z
    7   47.979  -118.575  2019-08-04T05:11:24Z
    8   47.986  -118.418  2019-08-07T10:11:25Z
    9    48.02  -118.404  2019-08-09T05:31:25Z

Nous voulons sélectionner les lignes qui contiennent '2019-08-08' dans la colonne 'date/heure d'observation'.

En utilisant str.contains()

Pour sélectionner les lignes qui contiennent une sous-chaîne particulière dans une DataFrame Pandas, on peut utiliser la méthode str.contains(). La syntaxe de cette commande est la suivante :

dataframe['column'].str.contains("substring")

Exemple

df[ df['observation date/time'].str.contains('2019-08-08')  ]

donne

      latitude longitude observation date/time
    4   47.985  -118.449  2019-08-08T05:56:24Z
    5   47.949  -118.495  2019-08-08T22:51:24Z

En utilisant match()

Une autre méthode pour sélectionner les lignes qui contiennent une sous-chaîne particulière dans une DataFrame Pandas consiste à utiliser la méthode .str.match(). La syntaxe de cette commande est la suivante:

dataframe['column'].str.match("pattern")

Example

df[ df['observation date/time'].str.match('2019-08-08')  ]

donne

      latitude longitude observation date/time
    4   47.985  -118.449  2019-08-08T05:56:24Z
    5   47.949  -118.495  2019-08-08T22:51:24Z

Différence entre match() et contains()

La principale distinction entre str.contains() et str.match() est que le premier utilise une recherche d'expression régulière (re.search) tandis que le second utilise une fonction de correspondance (re.match). Selon leur documentation respective, str.contains() vérifie si un motif ou une regex est présent dans les chaînes d'une série ou d'un index, tandis que str.match() extrait des éléments de longues chaînes en déterminant si chaque chaîne correspond à un ensemble de règles d'expression régulière existant.

Références

Liens Site
pandas.Series.str.contains pandas.pydata.org
match() docs.python.org