Вот мое определение 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
Код: Выделить всё
import pandas
df = pandas.read_csv('df.csv')
< /code>
Дататипы-< /p>
df_data.dtypes
ask float64
bid float64
ts object
Столбец 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'],
)
Код: Выделить всё
Traceback (most recent call last):
File "", line 1, in
TypeError: expected bytes, str found
bit of обновление ... < /p>
Я обнаружил метод, который является частью Google.protobuf.timestamp.timestamp < /code> CODED> CodeDateTime < /psementAmp < />>
аргумента, а также объект DateTime . Это странно, потому что, похоже, это должна быть функция конструктора, но не.
Код: Выделить всё
timestamp = Timestamp()
timestamp.FromDatetime(dt)
Код: Выделить всё
df = pandas.read_csv('df.csv')
df['ts'] = pandas.to_datetime(df['ts'])
Код: Выделить всё
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
Это сообщение об ошибке не имеет для меня большого смысла. Почему конструктор объекта ProtoBuf будет ожидать целочисленного типа, когда он был определен через файл .proto , чтобы ожидать повторного Google.protobuf.timestamp TimeStamp Тип?
Подробнее здесь: https://stackoverflow.com/questions/795 ... f-timestam