我有一个Pandas数据框,希望将其转换为NumPy记录数组或结构化数组。我使用的是Python 3.6 / Pandas 0.19.2 / NumPy 1.11.3。
df = pd.DataFrame(data=[[True, 1, 2],[False, 10, 20]], columns=['a','b','c'])
print(df.dtypes)
a bool
b int64
c int64
dtype: object
我的尝试如下:
# record array
res1 = df.to_records(index=False)
# structured array
s = df.dtypes
res2 = np.array([tuple(x) for x in df.values], dtype=list(zip(s.index, s)))
然而,在这些结果的 dtype
属性中,布尔类型似乎并不明显:
print(res1.dtype)
(numpy.record, [('a', '?'), ('b', '<i8'), ('c', '<i8')])
print(res2.dtype)
[('a', '?'), ('b', '<i8'), ('c', '<i8')]
为什么会这样?更普遍地说,这是唯一的例外吗,还是每次都需要手动检查以确保 dtype 转换已按预期进行处理?
编辑:另一方面,看起来转换是正确的:
print(res1.a.dtype) # bool
print(res2['a'].dtype) # bool
这只是一个显示问题吗?