将csv文件读入列表并将字符串转换为整数Python

问题描述 投票:0回答:3

我正在尝试读取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']
['2345', '4567', '45678', '56789']
...]

[我注意到数字在列表中存储为字符串,所以我通过newList = [int(i) for i in dataList]创建了一个新列表,并收到了此错误消息TypeError: int() argument must be a string, a bytes-like object or a number, not '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文件

    number1    number2    number3    number4
0    123        456        567        5678
1    4567       3456       6789       2345   
....

我需要读取此csv文件并将其存储在列表中,以便csv文件中的每一行都是一个类似于[[123, 456, 567, 5678], [4567, 3456, 6789, 2345]...]的列表

python list csv
3个回答
0
投票

之所以这样,是因为python3正在以二进制形式读写文件。因此,您可以将字节数据转换为字符串并继续,或者使用熊猫读取数据,这些数据通常会将您的数字读取为整数。

import pandas as pd

df = pd.read_csv("filename")

rows = df.values.tolist()

Pandas使您有更多的自由来对行执行操作。您也可以使用类似下面的方法将列的数据类型转换为int

df[column_name]=df[column_name].astype(int)


0
投票

这是因为您在另一个列表中有一个列表。就像您告诉我们的一样:

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]

0
投票

提供的答案@brunoto是正确的,我希望此解决方案(更接近您的解决方案:]

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])

请注意,所需要做的只是更改最后一行,遍历每行的元素并将它们分别转换为int,而不是尝试翻整行(一条记录,即list)成单个int

© www.soinside.com 2019 - 2024. All rights reserved.