python - 将带括号的字符串转换为numpy数组
问题描述
问题描述:
我在数据框列中有一个类似数组的结构作为字符串(我从 csv 文件中读取数据框)。
此列的一个字符串元素如下所示:
In [1]: df.iloc[0]['points']
Out [2]: '[(-0.0426, -0.7231, -0.4207), (0.2116, -0.1733, -0.1013), (...)]'
所以它实际上是一个类似数组的结构,对我来说它看起来“为 numpy 做好了准备”。
numpy.fromstring()
无济于事,因为它不喜欢括号:
将数组的字符串表示形式转换为python中的numpy数组
一个简单numpy.array()
的字符串本身,如果我将它复制并粘贴到array()
函数中,它会返回一个 numpy 数组。
但是如果我用包含这样的字符串的变量填充array()
函数:np.array(df.iloc[0]['points'])
它不起作用,给我一个ValueError: could not convert string to float
问题:
是否有任何功能可以以简单的方式执行此操作(无需替换或正则表达式括号)?
解决方案
您可以ast.literal_eval
在传递给之前使用numpy.array
:
from ast import literal_eval
import numpy as np
x = '[(-0.0426, -0.7231, -0.4207), (0.2116, -0.1733, -0.1013)]'
res = np.array(literal_eval(x))
print(res)
array([[-0.0426, -0.7231, -0.4207],
[ 0.2116, -0.1733, -0.1013]])
您可以对 Pandas 系列中的字符串执行等效操作,但不清楚是否需要跨行聚合。如果是这种情况,您可以组合使用上述逻辑派生的 NumPy 数组列表。
文档解释了可接受的类型literal_eval
:
安全地评估包含 Python 文字或容器显示的表达式节点或字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值和
None
.
因此,我们有效地将字符串转换为元组列表,np.array
然后可以转换为 NumPy 数组。
推荐阅读
- tensorflow - 与初学者代码相比,使用 TensorFlow 2.0 专家代码的训练结果更差
- c - 在 C 中将十进制转换为十六进制并打印数组
- python - 向用户显示到达时间和日期
- r - 如何使用 R 中的 testthat 测试错误和特定错误消息
- codenameone - 样式化 AutoCompleteTextField 的弹出列表
- python - 如何创建一个返回另一个模块的python模块
- python - AttributeError: 'int' 对象没有属性 'squeeze'
- javascript - Promise 中的 setTimeout - 如何解决以及为什么它只运行一次?
- reactjs - 使用 mobx 在 Reactjs 处重定向后组件不会重新渲染
- javascript - 如何将 HTML5 画布作为图像提交到 django 服务器