【问题标题】:Convert List object in a pandas dataframe to numpy array将 Pandas 数据框中的 List 对象转换为 numpy 数组
【发布时间】:2020-08-11 07:37:09
【问题描述】:

我的熊猫数据框列之一是 m 列的列表对象,每一行看起来像这样 'List(0.42, 0.24, 0.78,...)' 包含由引号括起来的 n 个元素的列表。此列的 Dtype 是 Object。

我需要将此列转换为 m X n np 数组。到目前为止,我尝试应用 np.fromstring(col content) 但它主要返回“ValueError:字符串大小必须是元素大小的倍数”。不过它确实适用于第一行。

如何适当地将这个List对象列转换为数组?

【问题讨论】:

  • 你最初是如何存储列表字符串的?我认为如果您将列值存储为实际列表而不是列表字符串,会更容易。
  • 来自下载的来源
  • 这是一个字符串,而不是实际的list,甚至是一个评估为list 的字符串。它缺少[]

标签: python pandas numpy


【解决方案1】:

我们需要修剪你的字符串,然后split

np.array(s.str.strip('List').str.strip('(|)').str.split(', ').tolist())
Out[11]: 
array([['0.42', '0,24', '0.78,...'],
       ['0.42', '0,24', '0.78,...']], dtype='<U8')

更新

s.str.strip('List').str.strip('(|)').str.split(',',expand=True).apply(lambda x : x.str.strip()).values
Out[18]: 
array([['0.42', '0', '24', '0.78', '...'],
       ['0.42', '0', '24', '0.78', '...']], dtype=object)

【讨论】:

  • 在列表中注明0,24。我认为需要更仔细地修剪。这是我理解的熊猫数据框列,而不是字符串数组。
  • @快速响应。但是 OP 将其编辑为 0.24 :D 。当然,这个解决方案仍然有效。
  • 感谢您的回答@BEN_YO (1) 我得到了它使用 strip() 和 split 而不是 str.split,因为它会返回 'str' object has no attribute 'str' error (2 ) 更新了 0,24 错字,只是 0.24 (3) 结果维度可能与 np.fromstring() 不同,np.fromstring 可能有问题吗?
  • @santoku 我认为字符串中的 numpy 应该返回正确的结果~
  • @santoku 然后你可以检查你的真实数据,看看不同的~
猜你喜欢
  • 2020-02-20
  • 2018-11-08
  • 2020-06-20
  • 1970-01-01
  • 2022-01-12
  • 2014-03-23
  • 2019-02-25
相关资源
最近更新 更多