首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pandas系列列表转换为numpy数组

将pandas系列列表转换为numpy数组
EN

Stack Overflow用户
提问于 2020-08-20 20:46:55
回答 2查看 570关注 0票数 6

我想要将数字列表中的pandas系列字符串转换为numpy数组。我得到的是这样的东西:

代码语言:javascript
复制
ds = pd.Series(['[1 -2 0 1.2 4.34]', '[3.3 4 0 -1 9.1]'])

我想要的输出:

代码语言:javascript
复制
arr = np.array([[1, -2, 0, 1.2, 4.34], [3.3, 4, 0, -1, 9.1]])

到目前为止,我所做的是将pandas系列转换为一系列数字,如下所示:

代码语言:javascript
复制
ds1 = ds.apply(lambda x: [float(number) for number in x.strip('[]').split(' ')])

但我不知道如何从ds1转到arr

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-20 20:52:37

使用Series.str.strip + Series.str.split并使用dtype=float创建新的np.array

代码语言:javascript
复制
arr = np.array(ds.str.strip('[]').str.split().tolist(), dtype='float')

结果:

代码语言:javascript
复制
print(arr)

array([[ 1.  , -2.  ,  0.  ,  1.2 ,  4.34],
       [ 3.3 ,  4.  ,  0.  , -1.  ,  9.1 ]])
票数 6
EN

Stack Overflow用户

发布于 2020-08-21 00:48:02

您可以先尝试从Series对象中删除"[]“,然后事情就会变得更简单,https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.split.html

代码语言:javascript
复制
ds1 = ds.str.strip("[]")
# split and exapand the data, conver to numpy array
arr = ds1.str.split(" ", expand=True).to_numpy(dtype=float)

那么arr将是您想要的正确格式,

代码语言:javascript
复制
array([[ 1.  , -2.  ,  0.  ,  1.2 ,  4.34],
       [ 3.3 ,  4.  ,  0.  , -1.  ,  9.1 ]])

然后我做了一点分析,与Shubham的卷积进行了比较。

代码语言:javascript
复制
# Shubham's way
%timeit arr = np.array(ds.str.strip('[]').str.split().tolist(), dtype='float')
332 µs ± 5.72 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

# my way
%timeit ds.str.strip("[]").str.split(" ", expand=True).to_numpy(dtype=float)
741 µs ± 4.21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

显然,他的解决方案要快得多!干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63505439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档