提问人:AndysPythonStuff 提问时间:1/23/2023 最后编辑:AndysPythonStuff 更新时间:1/25/2023 访问量:36
谁能解释一下(1,88,2)在收到错误时是什么意思:“ValueError:必须传递二维输入。形状=(1, 88, 2)”
Can anyone explain what (1, 88, 2) means when getting error: "ValueError: Must pass 2-d input. shape=(1, 88, 2)"
问:
我一直在弄乱数据帧和列表,试图了解它们的工作原理,我想知道是否有人可以为我解释一下我似乎无法将其制作成数据帧的列表,因为它不是二维输入......
所以我正在下载在证券交易所上市的公司。证券交易所有大约500家公司。每个公司可以位于一个或多个指数中。
bovespa = pd.read_csv('D:\Libraries\Downloads\IbovParts.csv', sep= ';')
这将从文件中创建一个数据帧,该文件是巴西 B3 指数上所有上市公司的列表,有 4 列:公司名称、股票类型、代码以及股票所属的指数,例如:
从这个数据帧中,我想创建一组较小的数据帧,每个数据帧将包含该特定索引中的所有公司。
我不确定这是最好的方法,但我发现了一些类似的代码来创建一个字典,其中索引名称是键,值是该特定指数中所有股票的列表。
首先,我手动制作了索引列表:
list_of_indexes = ['AGFS', 'BDRX', 'GPTW', 'IBOV', 'IBRA', 'IBXL', 'IBXX', 'ICO2', 'ICON', 'IDIV', 'IFIL', 'IFIX', 'IFNC', 'IGCT', 'IGCX', 'IGNM', 'ISEE', 'ITAG', 'IVBX', 'MLCX', 'SMLL', 'UTIL']
然后,这是创建键(索引名称)和值(空列表)的字典,然后填充列表的代码:
indexes = {key:[] for key in list_of_indexes}
for k in indexes:
mask = bovespa['InIndexes'].str.contains(k)
list = bovespa.loc[mask, ['Empresa','Code']]
indexes[k].append(list)
这似乎工作正常。检查打印输出,它做了我想做的事情。
现在,我想选择其中一个索引(例如“IBOV”)并创建一个仅包含IBOV中公司代码的新数据帧。然后,我可以使用yf库中的代码列表来下载“IBOV”公司的财务数据。
为此,我尝试了以下代码,希望获得一个带有索引、公司名称和公司代码的数据帧:
IBOV_codes_df = pd.DataFrame(indexes.get('IBOV'))
并收到此错误:
ValueError:必须传递二维输入。形状=(1, 88, 2)
我使用的数据的“类型”(indexes.get('IBOV'))是一个列表:
type(indexes.get('IBOV'))
返回 list,但 pd.DataFrame 无法使用它。此外,我无法调用列表中的任何单个元素。这是列表的样子(在 jupyter 中):
indexes.get('IBOV')
起初我以为这是一个有 88 行和 2 列的“正常”列表,然后我注意到列之后的第二个方括号,len(list) 告诉我这个列表只有一行。我仍然在列表和数据帧等上模糊不清......
无论如何,这个错误似乎很常见,我在stackoverflow上找到了一个解决方案:
pd.DataFrame(IBOV_codes[0])
不幸的是,stackoverflow 上的帖子只是告诉原始发帖人“这样做”,没有任何解释,它奏效了。它也对我有用,并创建了一个外观与列表相同的数据帧(但显然没有括号)。
从逻辑上讲,由于列表中只有一行,因此 [0] 是唯一可以使用的可调用行,因此它是有道理的。我的第一个问题...为什么??这到底是怎么回事?python 如何从只有一个长而令人困惑的 string(?) 元素的列表中制作数据帧?我知道它很聪明,但说真的?如何?另外,如果只有一行,为什么 python 会抛出错误:shape=(1, 88, 2)。这怎么可能?shape=(1, 88, 2) 是什么意思或看起来像什么?我以为形状是(1,1):一行一列。非常令人困惑。
我的第二个问题是关于索引的......
在由 csv 制作的原始数据帧中,所有公司的列表,索引(我假设)是数字列表:0、1、2 ...513.
当我开始切片并使用 pd 创建最终数据帧时。DataFrame(IBOV_codes[0]),索引列为 1, 12,17,24,34...492, 496, 497, 506, 511.每家公司都有相同的“索引”,从 csv 中读取时。
这些数字仍然是连续的,但索引缺少大量数字。这些索引还是整数吗?或者它们已经变成了字符串/对象?什么是最佳行为准则?要重新索引到 0、1、2、3、4 等?
如果有人能把事情弄清楚,“谢谢!
答: 暂无答案
评论