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().
Table des matières
É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 |