Я пытаюсь преобразовать кадры данных pandas в строки запроса для SQL Server.Для этого я должен сериализовать типы Python bool
как 0
или 1
.Я использовал:
>>>import pandas as pd
>>>import numpy as np
>>> df1 = pd.DataFrame([[0,"one",False] for l in range(5)], columns=["a","b","c"])
>>> strOut = [np.array2string(l, separator=',', formatter={'bool':lambda x: int(x)}) for l in df1.values]
>>> strOut
["[0,'one',False]", "[0,'one',False]", "[0,'one',False]", "[0,'one',False]", "[0,'one',False]"]
, однако вы можете видеть, что форматировщик numpy.array2string не обнаруживает собственный тип bool
в приведенном выше примере.Если я посмотрю на пример в документах
>>> x = np.arange(3)
>>> np.array2string(x, formatter={'int':lambda x: hex(x)})
'[0x0L 0x1L 0x2L]'
, вы увидите, что он работает.Я обнаружил тип значений в x
из примера, чтобы увидеть, что они на самом деле dtype(int32)
не int
.Поэтому я попытался сделать то же самое в своем коде и без сигар снова.
>>> df1 = pd.DataFrame([[0,"one",False] for l in range(5)], columns=["a","b","c"])
>>> strOut = [np.array2string(l, separator=',', formatter={'int':lambda x: hex(x)}) for l in df1.values]
>>> strOut
["[0,'one',False]", "[0,'one',False]", "[0,'one',False]", "[0,'one',False]", "[0,'one',False]"]
без изменений.Есть ли способ заставить numpy.array2string
работать с нативными типами?Или ... альтернативно есть лучший способ сериализации строк запроса из фреймов данных.Однако обратите внимание, что добавление внешних библиотек здесь не вариант.Я знаю, что могу внести sqlalchemy или что-то в этом роде, но ради этого вопроса мы делаем работу сами.