Python列表理解numpy数组

2024-05-07 14:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用9以上的数字时,从列表理解创建的NumPy数组的形状不正确。请帮助我更正它,并解释为什么会发生这种情况。请找到下面的代码

import pandas as pd
import numpy as np

sep_payment = pd.DataFrame({"Creditor":['Axis','RBL_CC','KOTAK_PL','KOTAK_CC','Cashe','SBI','HDFC_Jumbo','HDFC_CC','SCB','Tata Capital','Flex_Salary'],"Priority":[1,2,3,4,5,6,7,8,9,10,11],"Payment_Status":['Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending'],"Credit_Status":['Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending','Pending'],"Payment_Date":['-','-','-','-','-','-','-','-','-','-','-'],"Time Taken in Days":[2,5,5,2,5,2,5,5,5,5,2]})

# List comprehension Looped with range 9 NO ERRORS | Output (9, 6)
subb= sep_payment.iloc[1].to_string(index=False).split()
subb
subb2 = [sep_payment.iloc[i].to_string(index=False).split() for i in range(9)]
subb2
data= np.array(subb2)
print(data.shape)

# List comprehension Looped with range 10 ERROR in THE SHAPE printed | Output (10,)
subb= sep_payment.iloc[1].to_string(index=False).split()
subb
subb2 = [sep_payment.iloc[i].to_string(index=False).split() for i in range(10)]
subb2
data= np.array(subb2)
print(data.shape)

Dataframe

list comprehension


Tags: toinfalsedatastringindexnprange
1条回答
网友
1楼 · 发布于 2024-05-07 14:42:49

您面临的问题是由于bankTata Capital行的数据中出现了空格

在第1部分:

您的第一个代码是将这个字符串(对于行)分成6个部分,因为在6列中的任何标记之间都没有空格。这将产生一个(9,6)形状的numpy数组,如预期的那样是9行6列

subb2 = [sep_payment.iloc[i].to_string(index=False).split() for i in range(9)]
subb2

[['Axis', '1', 'Pending', 'Pending', '-', '2'],
 ['RBL_CC', '2', 'Pending', 'Pending', '-', '5'],
 ['KOTAK_PL', '3', 'Pending', 'Pending', '-', '5'],
 ['KOTAK_CC', '4', 'Pending', 'Pending', '-', '2'],
 ['Cashe', '5', 'Pending', 'Pending', '-', '5'],
 ['SBI', '6', 'Pending', 'Pending', '-', '2'],
 ['HDFC_Jumbo', '7', 'Pending', 'Pending', '-', '5'],
 ['HDFC_CC', '8', 'Pending', 'Pending', '-', '5'],
 ['SCB', '9', 'Pending', 'Pending', '-', '5']]

第二部分:

然而,在第二部分中,由于Tata Capital中的空格,您将所有其他行分成6部分,但其中一行分成7部分。当您尝试将其转换为numpy数组时,它会按预期创建一个包含10行但包含1列的数组,因为此数组中的每个对象都是一个列表对象,并计为1项

这是因为numpy中的ndarray需要每个轴具有相同的元素

subb2 = [sep_payment.iloc[i].to_string(index=False).split() for i in range(10)]
subb2

[['Axis', '1', 'Pending', 'Pending', '-', '2'],
 ['RBL_CC', '2', 'Pending', 'Pending', '-', '5'],
 ['KOTAK_PL', '3', 'Pending', 'Pending', '-', '5'],
 ['KOTAK_CC', '4', 'Pending', 'Pending', '-', '2'],
 ['Cashe', '5', 'Pending', 'Pending', '-', '5'],
 ['SBI', '6', 'Pending', 'Pending', '-', '2'],
 ['HDFC_Jumbo', '7', 'Pending', 'Pending', '-', '5'],
 ['HDFC_CC', '8', 'Pending', 'Pending', '-', '5'],
 ['SCB', '9', 'Pending', 'Pending', '-', '5'],
 ['Tata', 'Capital', '10', 'Pending', 'Pending', '-', '5']] #<  CHECK THIS ROWS

解决方案:

只需直接使用df.to_numpy()而不是您正在执行的获取numpy数组的操作

data = sep_payment.to_numpy()
data

# array([['Axis', 1, 'Pending', 'Pending', '-', 2],
#        ['RBL_CC', 2, 'Pending', 'Pending', '-', 5],
#        ['KOTAK_PL', 3, 'Pending', 'Pending', '-', 5],
#        ['KOTAK_CC', 4, 'Pending', 'Pending', '-', 2],
#        ['Cashe', 5, 'Pending', 'Pending', '-', 5],
#        ['SBI', 6, 'Pending', 'Pending', '-', 2],
#        ['HDFC_Jumbo', 7, 'Pending', 'Pending', '-', 5],
#        ['HDFC_CC', 8, 'Pending', 'Pending', '-', 5],
#        ['SCB', 9, 'Pending', 'Pending', '-', 5],
#        ['Tata Capital', 10, 'Pending', 'Pending', '-', 5],
#        ['Flex_Salary', 11, 'Pending', 'Pending', '-', 2]], dtype=object)

data.shape
#(11, 6)

相关问题 更多 >