代码之家  ›  专栏  ›  技术社区  ›  swiss_knight

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

  •  3
  • swiss_knight  · 技术社区  · 7 年前

    我在dataframe列中有一个类似数组的结构作为字符串(我从csv文件中读取了dataframe)。

    此列的一个字符串元素如下所示:

    In  [1]: df.iloc[0]['points']    
    Out [2]: '[(-0.0426, -0.7231, -0.4207), (0.2116, -0.1733, -0.1013), (...)]'
    

    所以它真的是一个类似数组的结构,在我看来,它已经“准备好了”。

    numpy.fromstring() 没有帮助,因为它不喜欢括号:
    convert string representation of array to numpy array in python

    简单的 numpy.array() 在字符串本身上,如果我复制并粘贴到 array() 函数正在返回一个numpy数组。
    数组() 函数的变量包含如下字符串: np.array(df.iloc[0]['points']) 它不起作用,给我一个 ValueError: could not convert string to float

    Convert string to numpy array

    问题是:

    是否有任何函数可以以简单的方式(不替换或正则化方括号)执行此操作?

    1 回复  |  直到 7 年前
        1
  •  7
  •   jpp    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]])
    

    文档解释了可接受的类型 literal_eval :

    安全地计算表达式节点或包含Python的字符串 由以下Python文本结构组成:字符串、字节, 数字、元组、列表、dict、set、布尔值和 None .

    所以我们有效地将一个字符串转换成一个元组列表 np.array