将带括号的字符串转换为numpy数组

时间:2018-08-17 14:59:02

标签: python arrays string pandas numpy

问题描述:

我在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

Convert string to numpy array

问题:

是否有任何功能可以简单地做到这一点(无需更换或重新放置括号)?

1 个答案:

答案 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数组。