python - numpy.array2string 未检测 native 类型

标签 python numpy serialization

我正在尝试将 pandas 数据帧转换为 SQL Server 的查询字符串。为此,我将 python bool 类型序列化为 01。 我一直在使用:

>>>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 格式化程序未检测到上面的 native 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 与 native 类型一起使用?或者..或者是否有更好的方法来序列化数据帧中的查询字符串。但请注意,此处不能选择引入外部库。我知道我可以引入 sqlalchemy 或类似的东西,但为了这个问题,我们正在自己做这项工作。

最佳答案

这与 array2string 不处理 bool 值无关。文档明确指出 boolformatter 字典支持的类型。当您调用 df1.values 时,问题完全在于数组的数据类型。

您正在处理 dtype object 数组,因此 array2string 缺少 bool 值。当您添加 dtype object 的格式化程序时,您可以看到此行为(注意格式化程序正在拾取每个值):

s = np.array2string(df1.values, separator=',', formatter={'object': lambda x: 'BAD'})
print(s)

[[BAD,BAD,BAD],
 [BAD,BAD,BAD],
 [BAD,BAD,BAD],
 [BAD,BAD,BAD],
 [BAD,BAD,BAD]]

我个人会在您尝试使用array2string之前处理转换,这样您就不必使用格式化程序在混合类型数组上,或者可能仅在单个系列上使用该函数。

关于python - numpy.array2string 未检测 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859164/

相关文章:

python - 将 MySQL 查询结果保存到 CSV 文件

python - 在python中没有收到带有套接字超时的任何数据后如何执行代码

python - Pandas groupby 累积/滚动总和、平均值和标准差

javascript - 使用 Javascript 中的 HTML 特殊字符从头到脚序列化 iframe 的内容

python - 根据 MA​​C 地址和用户名生成确定性 UUID

python - python函数的第一次使用

c# - 如何深入比较不可序列化的对象?

.net - .NET XmlSerializer 类可以将 InnerXml 反序列化为字符串吗?

python - 在 64 位 Windows 和 Python 上导入 PyLab 时出错

python - 索引二维矩阵的 NumPy 数组