2014-04-07 2 views
3

외부 Javascript 라이브러리에서 사용하기 위해 시간대 인식 date_range (TimeStamps)를 UNIX 에포크 값으로 변환해야합니다.pandas 시간대 인식 타임 스탬프를 UNIX epoche로 변환하는 방법은 무엇입니까?

나의 접근 방식은 다음과 같습니다

# Create localized test data for one day 
rng = pd.date_range('1.1.2014', freq='H', periods=24, tz="Europe/Berlin") 
val = np.random.randn(24) 
df = pd.DataFrame(data=val, index=rng, columns=['values']) 

# Reset index as df column 
df = df.reset_index() 

# Convert the index column to the desired UNIX epoch format 
df['index'] = df['index'].apply(lambda x: x.value // 10**6) 

DF [ '지수'] 예상하지만,이 UTC에 저장되는 것과 UNIX의 시대 값을 포함 (!).

pandas가 시간 소인을 numpy UTC datetime64 값으로 저장하고 있기 때문입니다.

요청한 시간대에 "올바른"에포크 값을 가져 오는 효과적인 방법이 있습니까?

This proposal doesn't work with DST

답변

1
In [17]: df 
Out[17]: 
          values 
2014-01-01 00:00:00+01:00 1.027799 
2014-01-01 01:00:00+01:00 1.579586 
2014-01-01 02:00:00+01:00 0.202947 
2014-01-01 03:00:00+01:00 -0.214921 
2014-01-01 04:00:00+01:00 0.021499 
2014-01-01 05:00:00+01:00 -1.368302 
2014-01-01 06:00:00+01:00 -0.261738 

2014-01-01 22:00:00+01:00 0.808506 
2014-01-01 23:00:00+01:00 0.459895 

[24 rows x 1 columns] 

를 사용하여 인덱스 방법 asi8는이이 UTC 시간입니다 (시대부터 ns에 이미있는) INT64로 변환!

In [18]: df.index.asi8//10**6 
Out[18]: 
array([1388530800000, 1388534400000, 1388538000000, 1388541600000, 
     1388545200000, 1388548800000, 1388552400000, 1388556000000, 
     1388559600000, 1388563200000, 1388566800000, 1388570400000, 
     1388574000000, 1388577600000, 1388581200000, 1388584800000, 
     1388588400000, 1388592000000, 1388595600000, 1388599200000, 
     1388602800000, 1388606400000, 1388610000000, 1388613600000]) 

에포크 이후 지역 표준 시간대입니다. 이것은 일반적으로 공용 메서드가 아니므로 UTC 데이터 (및 필요한 경우 시간대)를 항상 교환합니다.

In [7]: df.index._local_timestamps()//10**6 
Out[7]: 
array([1388534400000, 1388538000000, 1388541600000, 1388545200000, 
     1388548800000, 1388552400000, 1388556000000, 1388559600000, 
     1388563200000, 1388566800000, 1388570400000, 1388574000000, 
     1388577600000, 1388581200000, 1388584800000, 1388588400000, 
     1388592000000, 1388595600000, 1388599200000, 1388602800000, 
     1388606400000, 1388610000000, 1388613600000, 1388617200000]) 
+0

저는 UTC로 타임 스탬프를 교환하고 JavaScript를 사용하여 로컬 브라우저 시간대로 변환하여 동의하고 해결했습니다. – THM

관련 문제