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 数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组split函数垂直拆分二维numpy数组
Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组split函数水平(按列)拆分二维numpy数组