Pandas ist eine sehr nützliche Bibliothek, die Daten flexibel liest und eine Typkonvertierung durchführt. Im Vergleich zu den Typen int und float erfordert der Typ ** datetime (Typ datetime64 in 64-Bit-Betriebssystemen) jedoch eine sorgfältige Behandlung, und die Subtraktion ist besonders einfach zu verknüpfen **.
Versuchen wir, die Spalten zwischen Datum und Uhrzeit zu subtrahieren.
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
Beachten Sie, dass wenn Sie beim Lesen mit pd.read_csv () kein Argument angeben, es als str-Typ anstelle des datetime-Typs gelesen wird. Es gibt verschiedene Möglichkeiten, es als Spalte vom Typ Datum / Uhrzeit zu lesen. Es ist jedoch einfacher, das Argument parse_dates wie unten gezeigt anzugeben.
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]
Wenn Sie die Spalten einfach wie oben beschrieben subtrahieren, wird sie als timedelta64-Typ ausgegeben.
In der Praxis gibt es viele Situationen, in denen Sie es in Sekunden oder Minuten erhalten möchten.
Wenn Sie eine Variable vom Typ timedelta in Sekunden konvertieren möchten **. Total_seconds () ** ist wirksam, Es funktioniert nicht, selbst wenn ich es so ausführe, wie es in der Spalte (Serie) von DateFrame steht
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'
Es gibt verschiedene Möglichkeiten, eine Serie vom Typ Timedelta in Sekunden umzuwandeln. Durch die Kombination von ** Karte und Lambda wie unten gezeigt ist es einfach, in einer Zeile zu schreiben **
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 () ‥ ** Es gibt keine Methode, lol ** Teilen Sie total_seconds () durch 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
Neben ** total_seconds () ** gibt es ** Sekunden **, um das Zeitdelta in Sekunden umzuwandeln. Lassen Sie uns den Unterschied herausfinden
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
Laut hier ** total_seconds (): Differenz in Sekunden (Float-Typ) ** ** Sekunden: Die Anzahl der Sekunden (Typ int) der Differenz, zerlegt in Tage, Sekunden, Mikrosekunden, Millisekunden, Minuten, Stunden und Wochen ** Es scheint so.
Es scheint, dass total_seconds () ** die sogenannte ** "Zeitdifferenz" darstellt.
** Dieser Artikel ist vorbei ** Danke, dass du bis zum Ende zugesehen hast!
Recommended Posts