Python 列表理解 - numpy 数组 [关闭]

Posted

技术标签:

【中文标题】Python 列表理解 - numpy 数组 [关闭]【英文标题】:Python List Comprehension - numpy array [closed] 【发布时间】:2021-11-28 23:57:30 【问题描述】:

当我使用大于 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

【问题讨论】:

嗨,Jenish,欢迎来到 SO。一个快速提示,请复制代码并使用代码块将其粘贴到问题中以供其他人帮助。它不可能看到图像并为您提供帮助。请阅读How to Ask 并快速查看tour,了解如何改进您的帖子以充分利用 Stack Overflow! 嗨@AkshaySehgal,代码已添加,请协助 请检查下面的答案。您的代码问题是由于“塔塔资本”中出现的空间。我已经添加了解释和解决方案。 【参考方案1】:

您面临的问题是由于银行Tata 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']]

在第 2 部分:

然而,在第二部分中,由于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)

【讨论】:

谢谢你解决了它:-) @Akshay Sehgal

以上是关于Python 列表理解 - numpy 数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

NumPy 数组和 python 列表有啥区别? [复制]

如何在python中将列表保存为numpy数组?

Python将numpy数组的列表转换为2d数组

Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组split函数垂直拆分二维numpy数组

Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组split函数水平(按列)拆分二维numpy数组

将 NumPy 数组转换为 Python 列表结构?