簡體   English   中英

從 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

我只是想了解它有什么問題以及如何解決。

嘗試這個:

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)

使用 pandas。您可以將 csv 放入 dataframe,然后將列轉換為 numpy arrays:

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對象),因此無法解包。 它沒有可以分配給變量ij的兩個組件。

解決這個問題的最簡單方法可能是使用numpy.atleast_2d() function,例如,

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

這樣,如果文件ucov_users.csv只有一行兩列,數組uncov_users仍將有兩列,而不是包含兩個元素的一維數組。 (當然,這假設ucov_users.csv總是有兩列。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM