Récemment, j'ai examiné le code qui traite les données en Python et traite par lots des fonctions d'alerte simples.
Parmi eux, j'ai été surpris de trouver le code suivant. (Légèrement réécrit)
import pandas as pd
def select_this_month(df: pd.DataFrame) -> pd.DataFrame:
"""Extraire uniquement les données de ce mois
Args:
df:Trame de données à filtrer
Returns:
Trame de données filtrée
"""
now = df["Date"].max()
y, m = now[0:4], now[5:7]
res = df[df['Date'] >= (y + "-" + m + "-01")]
return res
Quand je regarde ce code, je récupère la valeur maximale avec pandas `` max '' (type numérique ou type datetime?), Et récupère une sous-chaîne avec une tranche (type de chaîne de caractères?). Je me suis demandé: "Qu'est-ce que c'est? Un type de date intégré aux pandas?"
En y regardant de plus près, il ne s'agissait que d'un type de chaîne avec un opérateur de comparaison (inégalité) défini.
a = '2016-12-31'
b = '2016-01-01'
a > b
# => True
a < b
# => False
J'ai également trouvé où le résultat de l'opérateur de comparaison est spécifié dans la documentation officielle de Python. 。
Strings (instances of str) compare lexicographically using the numerical Unicode code points (the result of the built-in function ord()) of their characters.
Strings and binary sequences cannot be directly compared.
Je vais le traduire sur Google pour le moment.
Les chaînes (instances str) sont comparées lexicographiquement en utilisant des points de code Unicode pour les caractères (résultats de la fonction intégrée ord ()). [3]
Les chaînes et les séquences binaires ne peuvent pas être comparées directement.
Document de la fonction ord dit aussi ceci, il semble donc qu'il soit comparé par point Unicode.
Pour une chaîne qui représente un seul caractère Unicode, renvoie un entier qui représente le point de code Unicode pour ce caractère. Par exemple, ord ('a') renvoie l'entier 97 et ord ('€') (le symbole de l'euro) renvoie 8364. C'est l'opposé de chr ().
Alors
Si tel est le cas, cela semble fonctionner sans problème, même avec un type de chaîne de caractères.
Je pense qu'il vaut mieux utiliser le type de date après tout.
Recommended Posts