编程语言
首页 > 编程语言> > python-使用“ genfromtxt”提取列

python-使用“ genfromtxt”提取列

作者:互联网

在问这个问题(q1q2)之前,我已经阅读了这两个问题,但我没有找到满意的答案

我需要从2D数组中提取两列而不使用pandas或loadtxt,而要使用genfromtxt

现在,我所做的是:

X = np.genfromtxt('File1.csv', 
                    delimiter='\t', 
                    skip_header=0, skip_footer=0, 
                    names=True , usecols=("Time") )

Y = np.genfromtxt('File1.csv', 
                    delimiter='\t', 
                    skip_header=0, skip_footer=0, 
                    names=True , usecols=("Profit") )

然后,使用matplotlib绘制Y与X的关系图,结果是完美的

现在,我想应该以“正确”的方式进行操作,避免读取两次数组.
所以我尝试了拆包功能:

 X, Y = np.genfromtxt('File1.csv', 
                    delimiter='\t', 
                    skip_header=0, skip_footer=0, 
                    names=True , usecols=("Time", "Profit"), unpack=True )

我得到的消息是:太多的值无法解包

现在,如果我在不解包的情况下为输出(例如Z)写了一个带有向量的前一个命令,则向量Z将包含一个不能直接绘制的元组.

这个简单的问题有解决方案吗?

解决方法:

当您有多个命名字段时,您将拥有一个1-d structured array,如下所示:

>>> np.genfromtxt('File1.csv', delimiter='\t', names=True, usecols=("Time", "Profit"))
array([(0.0, 1.0), (2.0, 3.0), (3.0, 4.0), (5.0, 6.0)], 
      dtype=[('Time', '<f8'), ('Profit', '<f8')])

您无法解包1d结构化数组,因为unpack = True所做的全部就是转置数组,使列沿第一轴变化,而1d数组的转置本身.因此,使用unpack可以获得相同的结果:

>>> np.genfromtxt('File1.csv', delimiter='\t', names=True, usecols=("Time", "Profit"), unpack=True)
array([(0.0, 1.0), (2.0, 3.0), (3.0, 4.0), (5.0, 6.0)], 
      dtype=[('Time', '<f8'), ('Profit', '<f8')])

即使您按照@Roberto的建议在usecols参数中使用数字,您仍然会遇到问题,因为如果您有多个字段,则使用names = True会为您提供结构化数组(这就是为什么您在第一次尝试时就没有注意到它的原因) ).

如果将其另存为Z,则可以将其绘制为

plt.plot(Z['Time'], Z['Profit'])

或者您可以按照最初的要求将其拆分:

X, Y = Z['Time'], Z['Profit']

标签:pandas,python-2-7,matplotlib,tuples,python
来源: https://codeday.me/bug/20191122/2059328.html