gpt4 book ai didi

python - Pandas 数据框到具有 bool 系列的结构化数组

转载 作者:行者123 更新时间:2023-11-28 19:02:24 25 4
gpt4 key购买 nike

我有一个 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)))

但是, bool 类型在这些结果的 dtype 属性中似乎并不明显:

print(res1.dtype)

(numpy.record, [('a', '?'), ('b', '<i8'), ('c', '<i8')])

print(res2.dtype)

[('a', '?'), ('b', '<i8'), ('c', '<i8')]

这是为什么?更一般地说,这是唯一的异常(exception),还是我们每次都必须手动检查以确保 dtype 转换已按预期处理?

编辑:另一方面,似乎转换是正确的:

print(res1.a.dtype)     # bool
print(res2['a'].dtype) # bool

这只是显示问题吗?

最佳答案

奇怪的是,NumPy 选择 ? 来表示 bool 值。来自 Data type objects (dtype) :

'?' boolean
'b' (signed) byte
'B' unsigned byte
'i' (signed) integer
'u' unsigned integer
'f' floating-point
'c' complex-floating point
'm' timedelta
'M' datetime
'O' (Python) objects
'S', 'a' zero-terminated bytes (not recommended)
'U' Unicode string
'V' raw data (void)

令人困惑的是,NumPy Array Interface从 C 扩展访问使用不同的映射:

t   Bit field (following integer gives the number of bits in the bit field).
b Boolean (integer type where all values are only True or False)
i Integer
u Unsigned integer
f Floating point
c Complex floating point
m Timedelta
M Datetime
O Object (i.e. the memory contains a pointer to PyObject)
S String (fixed-length sequence of char)
U Unicode (fixed-length sequence of Py_UNICODE)
V Other (void * – each item is a fixed-size chunk of memory)

感谢@bobrobbob 在文档中找到它。

关于python - Pandas 数据框到具有 bool 系列的结构化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51284192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com