Возникли проблемы с преобразованием даты и времени pandas в отметку времени unix

Что мне нужно сделать, так это преобразовать временную метку «год-месяц-день» в временную метку Unix, сделать с ней что-то, а затем изменить ее на временной ряд даты. Я работаю с отметкой времени «1999-09-07». Я получаю сообщение об ошибке: неверный литерал для int() с базой 10: '1999-09-07'

df1['timestamp'] = df1['timestamp'].astype(np.int64) // 10**9
#Got back this 
ERROR:invalid literal for int() with base 10: '1999-09-07'


df1 = pd.read_csv('stock_CSV/' + ticker + '.csv')
pd.to_datetime(df1['timestamp'],unit='ns', origin='unix')
df1['timestamp'] = df1['timestamp'].astype(np.int64) // 10**9
#
#....some code
#
pd.to_datetime(df1['timestamp'], unit='s')

Я ожидаю, что мои даты будут преобразованы в временную метку unix, а затем преобразованы обратно


person David Long    schedule 13.09.2019    source источник
comment
Ваша метка времени выглядит как строка. Сначала попробуйте df1['timestamp'] = pd.to_datetime(df1['timestamp']).   -  person Quang Hoang    schedule 13.09.2019
comment
Я пробовал это, но я все еще получал ту же ошибку   -  person David Long    schedule 13.09.2019
comment
Пожалуйста, сделайте минимально воспроизводимый пример   -  person harvpan    schedule 13.09.2019
comment
Я не думаю, что смогу минимизировать его еще больше, чем то, что у меня есть здесь. импортируйте данные, конвертируйте в дату и время, затем попробуйте преобразовать их в метку времени unix, а затем конвертируйте обратно   -  person David Long    schedule 13.09.2019
comment
Спасибо, Куанг Хоанг, мне пришлось импортировать его, чтобы установить даты индекса и анализа, а затем использовать то, что у вас есть, чтобы заставить его работать.   -  person David Long    schedule 18.09.2019


Ответы (1)


Вызов astype('int64') для серии меток времени возвращает количество секунд, даже если метки времени могут иметь разрешение в наносекундах.

Вы можете сделать это по-старому, посчитав секунды с 1 января 1970 года до меток времени:

# random epoch times, in nanoseconds
t = np.random.randint(1e9 * 1e9, 2e9 * 1e9, 10)

# convert to Timestamps
dates = pd.to_datetime(t, unit='ns')

# convert back to nanoseconds
epoch = (dates - pd.Timestamp('1970-01-01')).total_seconds() * 1e9

# verify that we did the conversion correctly
assert np.isclose(t, epoch).all()
person Code Different    schedule 14.09.2019
comment
Я не уверен, что у вас есть здесь, чтобы собрать его для моих данных. У вас есть случайные времена как t, а затем преобразование их в дату-время, а затем вычитание 1 января 1970 года, может быть, я или как бы я преобразовал свои временные метки из «год-месяц-день» в секунды? - person David Long; 16.09.2019
comment
Временная метка Unix — это просто количество секунд, прошедших с полуночи 1 января 1970 года. Чтобы получить наносекунды, вы умножаете это на 1e9. - person Code Different; 16.09.2019