2015-12-03 3 views
1

Я работаю с Unix отметками времени в Python 2.7/панды 0.17.1, и необходимо произвести ряд местных дат (в восточное время США). Марки с указанием временных зон, похоже, работают так, как ожидалось (давая локальную дату) при вызове .date() в отдельных точках данных, но при работе с ними как серии они, похоже, возвращаются к датам UTC. Есть ли способ получить выход на основе серийной даты в соответствии с локальными датами, создаваемыми при вызове .date() отдельно для объектов? (Спасибо!)TZ-серии знают даты и времени получения UTC на основе .date() выход в серии панд применяются (лямбда) операция

def stamp_converter(ts): 
    ser = pd.to_datetime(ts, unit='s', utc=True) 
    ind = pd.DatetimeIndex(ser).tz_localize('UTC').tz_convert('US/Eastern') 
    return ind 

test_stamps = pd.Series([1396670200, 1405733045, 1448248441]) 
# e.g., 4/05 in GMT, 4/04 in Eastern 

local_dates = pd.Series(stamp_converter(test_stamp)) 

print local_dates 

# 0 2014-04-04 23:56:40-04:00 
# 1 2014-07-18 21:24:05-04:00 
# 2 2015-11-22 22:14:01-05:00 
# dtype: datetime64[ns, US/Eastern] 

print local_dates.apply(lambda x: x.date()) 

# 0 2014-04-05 
# 1 2014-07-19 
# 2 2015-11-23 
# dtype: object 

for i, x in local_dates.iteritems(): 
    print x.date() 

# 2014-04-04 
# 2014-07-18 
# 2015-11-22 

ответ

0

Упс. Найди его.

print local_dates.dt.date 

# 0 2014-04-04 
# 1 2014-07-18 
# 2 2015-11-22 
# dtype: object 

Тем не менее: это озадачивает, что поведение отличается между отдельными .date() операций и .Не (лямбда х: x.date()). Мне было бы интересно, если кто-нибудь сможет объяснить, почему это происходит.