【发布时间】:2019-01-24 15:45:13
【问题描述】:
问题描述:
我在数据框列中有一个类似数组的结构作为字符串(我从 csv 文件中读取数据框)。
此列的一个字符串元素如下所示:
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
问题:
是否有任何功能可以以简单的方式做到这一点(无需替换或正则表达式括号)?
【问题讨论】:
-
第一个问题是:这些数据是从哪里来的?这是你正在生成的东西吗?或者某些程序或库生成的东西?如果您可以解决问题,以便以实际需要解析的形式创建数据,或者至少找到确切的格式以及您应该如何使用它的解释,那将比通过猜测进行逆向工程,这样你就可以编写一个 hacky 解析器。
-
无论如何,这看起来像是有人将元组列表的 repr 写入文件。这是一个非常糟糕的主意,但如果你不能改变它,你可以通过在每个字符串上调用
ast.literal_eval来扭转它。这将适用于您发布的示例,但不能保证它适用于您的所有数据,或者您不会遇到正确序列化数据不存在的浮点舍入问题。这是一种技巧,而不是解决方案。 -
structured数组的字符串(打印)表示是一个元组列表。repr字符串将包含dtype信息。但由于这是 DataFrame 中的一个单元格,因此可能还有其他可能性。您是否从csv文件中加载了此df?该文件中是否有这样的引号字符串?
标签: python arrays string pandas numpy