Calculez le décalage horaire entre deux colonnes avec Pandas DataFrame

Pandas et données de date et d'heure

Pandas est une bibliothèque très utile qui lit les données de manière flexible et effectue une conversion de type. Cependant, comparé aux types int et float, ** le type datetime (type datetime64 dans le système d'exploitation 64 bits) nécessite une manipulation prudente, et la soustraction est particulièrement facile à utiliser **.

Soustraction de la date et de l'heure

Essayons de soustraire les colonnes entre les dates et les heures.

Données à utiliser

time_diff_test.csv


A,B
2020-06-02 13:45:16,2020-06-02 13:50:23
2020-06-02 13:50:15,2020-06-02 14:55:19
2020-06-02 13:52:10,2020-06-03 13:57:21

Code qui lit les données et effectue la soustraction

Veuillez noter que si vous ne spécifiez pas d'argument lors de la lecture avec pd.read_csv (), il sera lu comme type str au lieu de type datetime. Il existe plusieurs façons de le lire en tant que colonne de type datetime, mais il est plus facile de spécifier l'argument parse_dates comme indiqué ci-dessous.

time_diff_test.py


import pandas as pd
df = pd.read_csv('time_diff_test.csv',parse_dates=['A', 'B'])
df['diff'] = df['B'] - df['A']
print(df)

#0   0 days 00:05:07
#1   0 days 01:05:04
#2   1 days 00:05:11
#Name: diff, dtype: timedelta64[ns]

Si vous soustrayez simplement les colonnes comme décrit ci-dessus, il sera affiché en tant que type timedelta64.

Obtenez la soustraction de la date et de l'heure en secondes (minutes, heures, jours ...)

En utilisation réelle, il existe de nombreuses situations où vous souhaitez l'obtenir en quelques secondes ou minutes.

Code qui ne fonctionne pas

Si vous souhaitez convertir une variable de type timedelta en secondes **. Total_seconds () ** est efficace, Cela ne fonctionne pas même si je l'exécute tel quel dans la colonne (Series) de DateFrame

python


import pandas as pd
df = pd.read_csv('time_diff_test.csv',parse_dates=['A', 'B'])
df['diff'] = df['B'] - df['A']
print(df['diff'].total_seconds())

#'Series' object has no attribute 'total_seconds'

Code qui fonctionne

Il existe plusieurs façons de convertir une série de type timedelta en secondes, En combinant ** map et lambda comme indiqué ci-dessous, il est facile d'écrire sur une seule ligne **

time_diff_test_seconds.py


import pandas as pd
df = pd.read_csv('time_diff_test.csv',parse_dates=['A', 'B'])
df['diff'] = df['B'] - df['A']
df['diff_ts'] = df['diff'].map(lambda x: x.total_seconds())
print(df['diff_ts'])

#0       307.0
#1     3904.0
#2    86711.0
#Name: diff_ts, dtype: float64

[Ajout] Utilisez Series.dt.total_seconds ()

df['diff_ts'] = df['diff'].dt.total_seconds()
print(df['diff_ts'])

#0      307.0
#1     3904.0
#2    86711.0
#Name: diff, dtype: float64

Décalage horaire en minutes et heures

total_minutes (), total_hours () ‥ ** Il n'y a pas de méthode, lol ** Divisez total_seconds () par 60, 3600

print(df['diff'].map(lambda x: x.total_seconds()/60.0))
print(df['diff'].map(lambda x: x.total_seconds()/3600.0))

#0       5.116667
#1      65.066667
#2    1445.183333
#Name: diff, dtype: float64
#0     0.085278
#1     1.084444
#2    24.086389
#Name: diff, dtype: float64

Différence entre total_seconds () et secondes

Outre ** total_seconds () **, il existe ** secondes ** comme moyen de convertir timedelta en secondes. Découvrons la différence

total_seconds()


print(df['diff'].map(lambda x: x.total_seconds()))
#0      307.0
#1     3904.0
#2    86711.0
#Name: diff, dtype: float64

seconds


print(df['diff'].map(lambda x: x.total_seconds()))
#0     307
#1    3904
#2     311
#Name: diff, dtype: int64

Selon ici ** total_seconds (): Différence exprimée en secondes (type float) ** ** secondes: Le nombre de secondes (type int) de la différence décomposée en jours, secondes, microsecondes, millisecondes, minutes, heures et semaines ** Il semble que ce soit le cas.

Il semble que total_seconds () ** représente le soi-disant ** "décalage horaire".

** Cet article est terminé ** Merci d'avoir regardé jusqu'au bout!

Recommended Posts

Calculez le décalage horaire entre deux colonnes avec Pandas DataFrame
Conversion de type de plusieurs colonnes de pandas DataFrame avec un type en même temps
Calculer l'angle entre les vecteurs à n dimensions avec TensorFlow
Modélisation-estimation de Bayes de la différence entre les deux groupes-
Vérifiez quelle ligne a causé l'erreur avec apply () (dataframe, Pandas)
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Calculez la similitude entre les phrases avec Doc2Vec, une évolution de Word2Vec
Parcourir .loc et .iloc en même temps dans pandas DataFrame
Examiner la relation entre deux variables (2)
Extraire la valeur maximale avec les pandas.
Estimer le délai entre deux signaux
Examiner la relation entre deux variables (1)
[Python] Joindre deux tables avec des pandas
Extraire plusieurs colonnes spécifiques avec des pandas
Bulk Insert Pandas DataFrame avec psycopg2
Examiner la relation entre deux variables (2)
Calculez le décalage horaire entre deux colonnes avec Pandas DataFrame
Estimer le délai entre deux signaux
Examiner la relation entre deux variables (1)
Calculer l'angle entre les vecteurs à n dimensions avec TensorFlow
Modélisation-estimation de Bayes de la différence entre les deux groupes-
Différentes façons de calculer la similitude entre les données avec python
Calculez le nombre de changements
Calculez la similitude entre les phrases avec Doc2Vec, une évolution de Word2Vec
Comment obtenir la différence de date et d'heure en secondes avec Python
Ajustez l'espacement entre les chiffres avec Matplotlib
Tracez l'indice boursier moyen Nikkei avec des pandas
[Pandas] Développer les chaînes de caractères en DataFrame
Remplacez les noms / valeurs des colonnes par pandas dataframe
Y a-t-il NaN dans le DataFrame pandas?