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 **.
Essayons de soustraire les colonnes entre les dates et les heures.
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
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.
En utilisation réelle, il existe de nombreuses situations où vous souhaitez l'obtenir en quelques secondes ou minutes.
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'
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
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
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
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