从CSV合并numpy ndarray

2024-10-01 11:30:34 发布

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

我有以下代码:

from numpy import genfromtxt
nysedatafile = os.getcwd() + '/nyse.txt';
nysedata = genfromtxt(nysedatafile, delimiter='\t', names=True, dtype=None);
nasdaqdatafile = os.getcwd() + '/nasdaq.txt';
nasdaqdata = genfromtxt(nasdaqdatafile, delimiter='\t', names=True, dtype=None);

现在我想合并来自2个CSV的数据,并尝试了各种功能:

例如:

^{pr2}$

退货:

TypeError: invalid type promotion    

我也尝试了numpy.vstack并尝试调用它的数组。 我希望最后一次打印会给出前两个csv文件的行的总和。在


编辑: 此命令:

print('NYSE shape:' + str(nysedata.shape));
print('NASDAQ shape:' + str(nasdaqdata.shape));
print('NYSE dtype:' + str(nysedata.dtype));
print('NASDAQ dtype:' + str(nasdaqdata.dtype));

退货:

NYSE shape:(3257,)
NASDAQ shape:(2719,)
NYSE dtype:[('Symbol', 'S14'), ('Name', 'S62'), ('LastSale', 'S9'), ('MarketCap', '<f8'), ('ADR_TSO', 'S3'), ('IPOyear', 'S4'), ('Sector', 'S21'), ('industry', 'S62'), ('Summary_Quote', 'S38')]
NASDAQ dtype:[('Symbol', 'S14'), ('Name', 'S62'), ('LastSale', 'S7'), ('MarketCap', '<f8'), ('ADR_TSO', 'S3'), ('IPOyear', 'S4'), ('Sector', 'S21'), ('industry', 'S62'), ('Summary_Quote', 'S34')]

Tags: numpytxtosprintshapedtypestrgetcwd
1条回答
网友
1楼 · 发布于 2024-10-01 11:30:34

np.vstack(或np.concatenate)引发错误的原因是这两个数组的数据类型不匹配。在

注意最后一个字段:('Summary_Quote', 'S38')与{}。nysedata的Summary_Quote列的长度为38字节,而nasdaqdata列的长度仅为34字节。 (编辑:LastSale列也遇到了类似的问题。)

发生这种情况是因为genfromtxt在设置dtype = None参数时猜测列的数据类型。对于字符串列,genfromtxt确定需要包含的最小字节数 该列中的所有字符串。在

因此,要堆叠这两个数组,必须将较小的数组升级为较大的数组的数据类型:

import numpy.lib.recfunctions as recfunctions
recfunctions.stack_arrays([nysedata,nasdaqdata.astype(nysedata.dtype)], usemask = False)

(我以前的回答np.vstack公司. 这将产生一个二维形状数组(N,1)。recfunctions.stack_arrays返回形状(N,)的一维数组。由于nysedatanasdaqdata是一维的,我认为最好也返回一维数组。)

可能更简单的解决方案是先连接两个csv文件,然后调用genfromtxt

^{pr2}$

相关问题 更多 >