我在dataframe列中有一个像字符串一样的数组结构(我从csv文件中读取了dataframe)。
此列的一个字符串元素如下所示:
In [1]: df.iloc[0]['points']
Out [2]: '[(-0.0426, -0.7231, -0.4207), (0.2116, -0.1733, -0.1013), (...)]'
所以它实际上是一个类似数组的结构,对我来说看起来“已经为numpy准备好了”。
numpy.fromstring()
无济于事,因为它不喜欢方括号:
convert string representation of array to numpy array in python
如果我将字符串复制并粘贴到numpy.array()
函数中,则字符串本身上的一个简单array()
会返回一个numpy数组。
但是,如果我用包含如下字符串的变量填充array()
函数:np.array(df.iloc[0]['points'])
则不起作用,给我一个ValueError: could not convert string to float
是否有任何功能可以简单地做到这一点(无需更换或重新放置括号)?
答案 0 :(得分:7)
在传递给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数组。