[PYTHON] numpy.timedelta64 값에서 일 추출
PYTHONnumpy.timedelta64 값에서 일 추출
나는 판다 / 파이썬을 사용하고 있는데 날짜 / 시간을 포함하는 df의 필드에서 'to_datetime'함수를 사용하여 생성 된 두 개의 날짜 계열 s1과 s2가 있습니다.
s2에서 s1을 뺄 때
나는 타입의 시리즈, s3을 얻는다.
0 385 days, 04:10:36
1 57 days, 22:54:00
2 642 days, 21:15:23
3 615 days, 00:55:44
4 160 days, 22:13:35
5 196 days, 23:06:49
6 23 days, 22:57:17
7 2 days, 22:17:31
8 622 days, 01:29:25
9 79 days, 20:15:14
10 23 days, 22:46:51
11 268 days, 19:23:04
12 NaT
13 NaT
14 583 days, 03:40:39
시리즈의 1 요소를 어떻게 봅니까?
나는 이런 것을 얻는다 :
어떻게하면 s3에서 일을 추출하고 어쩌면 정수로 유지합니까 (시간 / 분 등)?
모든 도움을 미리 감사드립니다.
해결법
-
==============================
1.당신은 하루 정밀도로 timedelta로 변환 할 수 있습니다. 정수 값을 추출하려면 하루의 시간대로 나눕니다.
당신은 하루 정밀도로 timedelta로 변환 할 수 있습니다. 정수 값을 추출하려면 하루의 시간대로 나눕니다.
>>> x = np.timedelta64(2069211000000000, 'ns') >>> days = x.astype('timedelta64[D]') >>> days / np.timedelta64(1, 'D') 23
또는 @PhillipCloud에서 제안했듯이 timedelta는 전달 된 두 번째 매개 변수 ( 'D', 'ns', ...)에 따라 다양한 방식으로 해석되는 64 비트 정수이므로 단지 days.astype (int)입니다.
여기에서 자세한 내용을 확인할 수 있습니다.
-
==============================
2.dt.days를 사용하여 정수로 요일 속성을 가져옵니다.
dt.days를 사용하여 정수로 요일 속성을 가져옵니다.
예 :
In [14]: s = pd.Series(pd.timedelta_range(start='1 days', end='12 days', freq='3000T')) In [15]: s Out[15]: 0 1 days 00:00:00 1 3 days 02:00:00 2 5 days 04:00:00 3 7 days 06:00:00 4 9 days 08:00:00 5 11 days 10:00:00 dtype: timedelta64[ns] In [16]: s.dt.days Out[16]: 0 1 1 3 2 5 3 7 4 9 5 11 dtype: int64
보다 일반적으로 - .components 속성을 사용하면 축소 된 형태의 timedelta에 액세스 할 수 있습니다.
In [17]: s.dt.components Out[17]: days hours minutes seconds milliseconds microseconds nanoseconds 0 1 0 0 0 0 0 0 1 3 2 0 0 0 0 0 2 5 4 0 0 0 0 0 3 7 6 0 0 0 0 0 4 9 8 0 0 0 0 0 5 11 10 0 0 0 0 0
시간 속성을 얻으려면 다음을 수행하십시오.
In [23]: s.dt.components.hours Out[23]: 0 0 1 2 2 4 3 6 4 8 5 10 Name: hours, dtype: int64
-
==============================
3.시간이 정해진 시리즈가 있다고 가정 해보십시오.
시간이 정해진 시리즈가 있다고 가정 해보십시오.
import pandas as pd from datetime import datetime z = pd.DataFrame({'a':[datetime.strptime('20150101', '%Y%m%d')],'b':[datetime.strptime('20140601', '%Y%m%d')]}) td_series = (z['a'] - z['b'])
이 Timedelta 열 또는 시리즈를 변환하는 한 가지 방법은 Timedelta 개체 (pandas 0.15.0 이상)로 캐스팅 한 다음 개체에서 요일을 추출하는 것입니다.
td_series.astype(pd.Timedelta).apply(lambda l: l.days)
또 다른 방법은 시리즈를 timedelta64로 캐스팅 한 다음 int로 캐스팅하는 것입니다.
td_series.astype('timedelta64[D]').astype(int)
from https://stackoverflow.com/questions/18215317/extracting-days-from-a-numpy-timedelta64-value by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] print 문 다음에 줄 바꿈을 어떻게 억제 할 수 있습니까? (0) | 2018.10.12 |
---|---|
[PYTHON] 어떻게 루프에서 파이썬 목록에서 항목을 제거하려면? [복제] (0) | 2018.10.12 |
[PYTHON] MySQL 용 이스케이프 문자열 파이썬 (0) | 2018.10.12 |
[PYTHON] 파이썬의 os.makedirs가 내 경로의 "~"을 이해하지 못합니다. (0) | 2018.10.12 |
[PYTHON] 공통 요소를 공유하는 목록 병합 (0) | 2018.10.11 |