我有一个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
对象(,因此无法对其进行解压缩。它没有两个可以分配给变量i
和j
的组件。
修复此问题的最简单方法可能是使用numpy.atleast_2d()
函数,例如
uncov_users = np.atleast_2d(np.genfromtxt('ucov_users.csv', delimiter=','))
这样,如果文件ucov_users.csv
只有一行两列,则数组uncov_users
仍将有两列,而不是具有两个元素的1d数组。(当然,这假设ucov_users.csv
总是有两列。(