从CSV文件读取数据会产生TypeError



我有一个csv文件,其中包含以下存储为uncov_users.csv:2867,2978的数据

我正试图从CSV文件中获取数据并打印它,但我遇到了一个错误。我需要单独变量中的数据,所以我使用for i,j循环。

我的代码:

import numpy as np
uncov_users = np.genfromtxt('ucov_users.csv', delimiter=',')
for i,j in uncov_users:
ux_coor = i  
uy_coor = j  
print(ux_coor,uy_coor)

错误:

Traceback (most recent call last):
File "D:ProgrammesFinal_YearPlot_DFOtest.py", line 3, in <module>
for i, j in uncov_users:
TypeError: cannot unpack non-iterable numpy.float64 object

我只是想了解它到底出了什么问题,以及如何修复它。

试试这个:

import numpy as np
text = open("ucov_users.csv", "r")
text = ''.join([i for i in text]) 
.replace(" ", "n")
x = open("ucov_users.csv", "w")
x.writelines(text)
x.close()

uncov_users = np.genfromtxt('ucov_users.csv', delimiter=',')
for i,j in uncov_users:
ux_coor = i  
uy_coor = j  
print(ux_coor,uy_coor)

使用熊猫。您可以将csv放在数据帧中,然后将列转换为numpy数组:

import pandas
import numpy as np
dataframe = pandas.read_csv('ucov_users.csv', delimiter=',')
ux_coord = np.array(dataframe.iloc[:, 0])
uy_coord = np.array(dataframe.iloc[:, 1])

您的uncov_users变量的形状错误。对于环路

for i,j in uncov_users:
# stuff ...

为了工作,uncov_users需要是一个有两列的2d数组,这样i就可以从第一列中分配一个值,j就可以从第二列中分配值。

如果你这样重写for循环,这个问题会更容易发现:

for row in uncov_users:
i,j = row
# stuff ...

对于您拥有的uncov_users数组,row只是一个数字(或者准确地说,是一个numpy.float64对象(,因此无法对其进行解压缩。它没有两个可以分配给变量ij的组件。

修复此问题的最简单方法可能是使用numpy.atleast_2d()函数,例如

uncov_users = np.atleast_2d(np.genfromtxt('ucov_users.csv', delimiter=','))

这样,如果文件ucov_users.csv只有一行两列,则数组uncov_users仍将有两列,而不是具有两个元素的1d数组。(当然,这假设ucov_users.csv总是有两列。(

相关内容

  • 没有找到相关文章

最新更新