복붙노트

[PYTHON] numpy.timedelta64 값에서 일 추출

PYTHON

numpy.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. ==============================

    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. ==============================

    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. ==============================

    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)
    
  4. from https://stackoverflow.com/questions/18215317/extracting-days-from-a-numpy-timedelta64-value by cc-by-sa and MIT license