gpt4 book ai didi

Python:从 DataFrame 中的两列创建结构化 numpy 结构化数组

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:09 24 4
gpt4 key购买 nike

如何从 DataFrame 中的两列创建结构化数组?我试过这个:

df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
df

a b
0 1 2
1 10 20

x = np.array([([val for val in list(df['a'])],
[val for val in list(df['b'])])])

但这给了我这个:

array([[[ 1, 10],
[ 2, 20]]])

但我想要这个:

[(1,2),(10,20)]

谢谢!

最佳答案

有两种方法。与常规 NumPy 数组相比,您可能会遇到性能和功能方面的损失。

记录数组

您可以使用 pd.DataFrame.to_records使用 index=False。从技术上讲,这是一个 record array , 但对于许多用途来说,这就足够了。

res1 = df.to_records(index=False)

print(res1)

rec.array([(1, 2), (10, 20)],
dtype=[('a', '<i8'), ('b', '<i8')])

结构化数组

手动地,您可以通过按行转换为 tuple 来构建结构化数组,然后为 dtype 参数指定元组列表。

s = df.dtypes
res2 = np.array([tuple(x) for x in df.values], dtype=list(zip(s.index, s)))

print(res2)

array([(1, 2), (10, 20)],
dtype=[('a', '<i8'), ('b', '<i8')])

有什么区别?

很少。 recarray 是常规 NumPy 数组类型 ndarray 的子类。另一方面,第二个示例中的结构化数组是 ndarray 类型。

type(res1)                    # numpy.recarray
isinstance(res1, np.ndarray) # True
type(res2) # numpy.ndarray

主要区别在于记录数组有助于属性查找,而结构化数组会产生AttributeError:

print(res1.a)
array([ 1, 10], dtype=int64)

print(res2.a)
AttributeError: 'numpy.ndarray' object has no attribute 'a'

相关:NumPy “record array” or “structured array” or “recarray”

关于Python:从 DataFrame 中的两列创建结构化 numpy 结构化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51279973/

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