从 CSV 文件读取数据会产生 TypeError
Reading data from a CSV file yields 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:\Programmes\Final_Year\Plot_DFO\test.py", line 3, in <module>
for i, j in uncov_users:
TypeError: cannot unpack non-iterable numpy.float64 object
我只是想了解它出了什么问题以及如何解决。
使用pandas。您可以将 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
需要是一个有两列的二维数组,这样 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
仍将有两列,而不是包含两个元素的一维数组。 (当然,这假设 ucov_users.csv
总是有两列。)
试试这个:
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 文件,其中存储了以下数据 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:\Programmes\Final_Year\Plot_DFO\test.py", line 3, in <module>
for i, j in uncov_users:
TypeError: cannot unpack non-iterable numpy.float64 object
我只是想了解它出了什么问题以及如何解决。
使用pandas。您可以将 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
需要是一个有两列的二维数组,这样 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
仍将有两列,而不是包含两个元素的一维数组。 (当然,这假设 ucov_users.csv
总是有两列。)
试试这个:
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)