Python 将csv文件读入列表,并将字符串转换为整数
我试图读取CSV文件,然后将所有数据返回到列表中。我首先尝试使用Python 将csv文件读入列表,并将字符串转换为整数,python,list,csv,Python,List,Csv,我试图读取CSV文件,然后将所有数据返回到列表中。我首先尝试使用csv.reader读取csv文件,方法是使用以下代码: import csv with open(fileName, 'r') as f: next(f) data = csv.reader(f) dataList = list(data) 我现在有一个列表,看起来像: [['123', '234', '456', '567'] ['345', '3456', '5678', '678'] ['23
csv.reader
读取csv文件,方法是使用以下代码:
import csv
with open(fileName, 'r') as f:
next(f)
data = csv.reader(f)
dataList = list(data)
我现在有一个列表,看起来像:
[['123', '234', '456', '567']
['345', '3456', '5678', '678']
['2345', '4567', '45678', '56789']
...]
我注意到这些数字在列表中存储为字符串,因此我通过newList=[int(I)for I in dataList]
创建了一个新列表,并收到了此错误消息TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“list”
因此,我尝试了在Youtube上看到的以下代码:
with open('fileName', 'r') as f:
next(f)
data = csv.reader(f)
data_lst = []
for line in reader:
data_lst.append([int(line)])
我得到这个错误信息:
ValueError Traceback (most recent call last)
<ipython-input-123-9fbefdb892ab> in <module>
3 data = csv.reader(f)
4 data_lst = []
----> 5 for line in reader:
6 data_lst.append([int(line)])
ValueError: readline of closed file
我需要读取这个csv文件并将数据存储在一个列表中,这样csv文件中的每一行都是一个类似于
[[123,456,567,5678],[4567,3456,6789,2345]…]
的列表,因为python3正在读取和写入二进制文件。因此,您可以将字节数据转换为字符串并继续,也可以使用pandas读取数据,这些数据主要以整数形式读取数字
import pandas as pd
df = pd.read_csv("filename")
rows = df.values.tolist()
Pandas使您可以更自由地对行执行操作。您还可以使用下面的方法将列的数据类型转换为int
df[column_name]=df[column_name].astype(int)
这是因为你在另一个列表中有一个列表。 就像你告诉我们的:
dataList = [['123', '234', '456', '567'],['345', '3456', '5678', '678'],['2345', '4567', '45678', '56789']]
在代码中,您正在迭代内部列表,因此只需要迭代内部列表中的字符串。
像这样:
int_list = []
for inner_list in dataList:
for string in inner_list:
int_list.append(int(string))
或者,对于单行:
int_list = [int(string) for inner_list in dataList for string in inner_list]
其输出如下所示:
[123, 234, 456, 567, 345, 3456, 5678, 678, 2345, 4567, 45678, 56789]
@编辑
如果您想要一个值列表作为输入,下面的代码将起作用
outer_out_list = []
for inner_list in dataList:
innet_out_list = []
for string in inner_list:
innet_out_list.append(int(string))
outer_out_list.append(innet_out_list)
输出:
[[123, 234, 456, 567], [345, 3456, 5678, 678], [2345, 4567, 45678, 56789]]
@brunoto提供的答案是正确的,我更喜欢这个解决方案(更接近您的):
请注意,所需要做的只是更改最后一行,在每一行的元素上循环,并将它们分别转换为
int
,而不是试图将整行(一条记录,即list
)转换为单个int。问题似乎是您有一个嵌套列表,请执行:[[int(i)对于l中的i]对于数据列表中的l]
这实际上不是真的-使用open()
,Python以文本模式打开文件,因此读取是可以的。OP的错误实际上是正确访问列表。
[[123, 234, 456, 567], [345, 3456, 5678, 678], [2345, 4567, 45678, 56789]]
with open('fileName', 'r') as f:
next(f)
data = csv.reader(f)
data_lst = []
for line in reader:
data_lst.append([int(x) for x in line])