Как преобразовать из Python Pandas TimeStamp в повторный google.protobuf.timestamp? (Python + Google Protocol Buffers)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как преобразовать из Python Pandas TimeStamp в повторный google.protobuf.timestamp? (Python + Google Protocol Buffers)

Сообщение Anonymous »

Я пытаюсь написать какой-то код, который преобразует содержимое pandas.dataframe в объект Protobuf, который можно сериализовать и записать в файл.
Вот мое определение Protobuf.

Код: Выделить всё

syntax = "proto3";

import "google/protobuf/timestamp.proto"

message BidAskTimeseries {
repeated double bid = 1;
repeated double ask = 2;
repeated google.protobuf.Timestamp timestamp = 3;
}
< /code>
Это можно скомпилировать с помощью < /p>
protoc --proto_path=. --python_out=. bid_ask_timeseries.proto
Pandas.dataframe был загружен из файла CSV.

Код: Выделить всё

import pandas

df = pandas.read_csv('df.csv')
< /code>
Дататипы-< /p>
df_data.dtypes
ask    float64
bid    float64
ts      object
Однако ts на самом деле является строкой .
Столбец TimeStamp может быть преобразована в Pandas.timestamp обычным способом

Код: Выделить всё

df['ts'] = pandas.to_datetime(df['ts'])
< /code>
Однако этот шаг следует считать необязательным. < /p>
Я не смог выяснить, как создать объект Python protobuf из этих данных. < /p>
import bid_ask_timeseries_pb2
from google.protobuf.timestamp import Timestamp

bid_ask_timeseries = bid_ask_timeseries_pb2.BidAskTimeseries(
bid=df['bid'],
ask=df['ask'],
timestamp=df['ts'],
)
Это казалось, что сохранение столбца 'ts' в качестве строки будет наиболее простым подходом, так как dir (timestamp) показывает, что TimeStamp имеет метод FromString . Однако это вызвало следующую ошибку. < /P>

Код: Выделить всё

Traceback (most recent call last):
File "", line 1, in 
TypeError: expected bytes, str found
преобразование в pandas.timestamp предпочтительнее, поскольку другие части моего кода ожидают, что DataFrame со значениями dateTime, хранящиеся как pandas.timestamp , а не строка . Содержит количество количества секунд и количество наносекунд, точно так же, как тип Timespec Linux struct . (Если я ошибаюсь в этом, дайте мне знать, я не был слишком уверен, если посмотреть на документацию.) Это будет в соответствии с форматом ProtoBuf для TimeStamp , который представляет собой int64 count of seconds и int32 count of nanos . Так кажется, что это должно быть относительно прямой способ, чтобы сконструировать от протокола. Но я не могу понять, как сделать это разумно. (То есть не элементный элемент на уровне Python, который, вероятно, будет чрезвычайно медленным.) < /P>

bit of обновление ... < /p>
Я обнаружил метод, который является частью Google.protobuf.timestamp.timestamp < /code> CODED> CodeDateTime < /psementAmp < />>
аргумента, а также объект DateTime . Это странно, потому что, похоже, это должна быть функция конструктора, но не.

Код: Выделить всё

timestamp = Timestamp()
timestamp.FromDatetime(dt)
Это немного странно, как API.

Код: Выделить всё

df = pandas.read_csv('df.csv')
df['ts'] = pandas.to_datetime(df['ts'])
Я попытался преобразовать это в список google.protobuf.timestamp.timestamp следующим образом:

Код: Выделить всё

def convert(t):
timestamp = Timestamp()
timestamp.FromDatetime(t)
return timestamp

timestamp_list = list(map(convert, df['ts']))

bid_ask_timeseries = bid_ask_timeseries_pb2.BidAskTimeseries(
bid=df['bid'],
ask=drf['ask'],
timestamp=timestamp_list,
)
< /code>
Я бы написал функцию Lambda для выполнения преобразования, но трудно написать такую ​​вещь в Python.TypeError: 'Timestamp' object cannot be interpreted as an integer
Я также пытался преобразовать список в numpy.array , однако ошибка была такой же.
Это сообщение об ошибке не имеет для меня большого смысла. Почему конструктор объекта ProtoBuf будет ожидать целочисленного типа, когда он был определен через файл .proto , чтобы ожидать повторного Google.protobuf.timestamp TimeStamp Тип?

Подробнее здесь: https://stackoverflow.com/questions/795 ... f-timestam
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»