繁体   English   中英

通过 np.concatenate python 连接值

[英]Concatenate value via np.concatenate python

任何让我开始的帮助表示赞赏。 我有一个大数据框,这是一个小例子,我试图在数据框中连接 arrays 但对于大数据(许多行和列)来说非常慢。

这是代码。

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 时,我得到了预期的 output 和形状,但是当我将它添加到列表中时,我看不到形状。 形状对我来说很重要,因为我需要改变尺寸。 谢谢你。

如果目标是为每个行条目堆叠列,您可以这样做:

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)]})

Dataframe 看起来像这样:

     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]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM