python - 通过 np.concatenate python 连接值
问题描述
任何让我开始的帮助表示赞赏。我有一个大数据框,这是一个小例子,我试图在数据框中连接数组,但对于大数据(许多行和列)来说非常慢。
这是代码。
import numpy as np
import pandas as pd
# Define a dictionary containing students data
data = {#'Name': ['Ankit', 'Amit'],
'Val': [np.zeros(2)],
'Val1':[np.ones(2)],
'Val2':[np.ones(2)]
}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data, columns = ['Val','Val1','Val2'])
for index, row in df.iterrows():
prev = np.zeros((1,1,2))
for r in row:
prev = np.concatenate((prev, [[r.tolist()]]))
X=np.delete(prev, 0,axis=0).reshape(df.shape[0],df.shape[1],2)
我已经搜索过,一些帖子建议使用 pandas 应用,但我不知道该怎么做。只是想知道是否有人可以分享一个更好的方法来做到这一点,以便我可以开始。谢谢你。
编辑:根据@StupidWolf 的建议更新了答案。谢谢!
def format(df):
result = []
for idx in df.index:
print(idx)
X=np.vstack(df.to_numpy()[idx])
print(X)
result.append(X)
return result
result = format(df)
nsamples, nx, ny = result.shape
print(nsamples,nx,ny)
当我打印 X 时,我得到了预期的输出和形状,但是当我将它添加到列表中时,我看不到形状。形状对我来说很重要,因为我需要改变尺寸。谢谢你。
解决方案
如果目标是为每个行条目堆叠列,您可以这样做:
df = pd.DataFrame({'Val0':[np.random.randint(0,5,2) for i in range(3)],
'Val1':[np.random.randint(0,5,2) for i in range(3)],
'Val2':[np.random.randint(0,5,2) for i in range(3)]})
数据框如下所示:
Val0 Val1 Val2
0 [2, 1] [0, 1] [1, 0]
1 [0, 3] [0, 0] [3, 4]
2 [2, 2] [3, 3] [2, 0]
您可以像这样堆叠非常行:
[np.vstack(i) for i in df.to_numpy()]
要查看形状,您需要将此列表设为 np.array:
res = np.array([np.vstack(i) for i in df.to_numpy()])
res.shape
(3, 3, 2)
给你一个列表,你的行的长度:
[array([[2, 1],
[0, 1],
[1, 0]]),
array([[0, 3],
[0, 0],
[3, 4]]),
array([[2, 2],
[3, 3],
[2, 0]])]
或者,如果您熟悉 pandas:
res = df.apply(lambda i:np.vstack(i),axis=1)
它被组织成一个系列,非常元素具有您需要的形状:
res[0]
array([[2, 1],
[0, 1],
[1, 0]])
res[1]
array([[0, 3],
[0, 0],
[3, 4]])
推荐阅读
- python - 在 Python 中遍历数据框的最佳方法是什么?
- amazon-web-services - 如何使用 nodejs 和 AWS SDK 将对象上传到私有 s3 存储桶?
- excel - 在 office-addin 运行时编辑单元格时 Excel 崩溃
- typescript - 使用 Inversify 和 mocha 和 chai 在 Typescript 中使用依赖注入进行单元测试
- c++ - 在 Windows 上构建 mongo-driver-cxx
- c++ - 类型类的 C++ 对象仅访问一个打印函数
- spring-boot - 如何知道生产 Spring Boot 应用程序中使用的日志级别?
- mysql - 如何在查找表中将整数更改为字符串?
- .net-4.5 - 项目在另一个项目中寻找自己的 DLL
- java - 错误:无法推断 ProducerRecord<> 的类型参数