Python将csv文件列读入列表,忽略标题

Python将csv文件列读入列表,忽略标题,python,list,csv,Python,List,Csv,我有一个文件“data.csv”,看起来像 ColA, ColB, ColC 1,2,3 4,5,6 7,8,9 我想打开文件列并将其读入列表,省略该列表的第一个条目,例如 dataA = [1,4,7] dataB = [2,5,8] dataC = [3,6,9] 实际上,有超过3列,列表非常长,这只是格式的一个示例。我试过: csv_file = open('data.csv','rb') csv_array = [] for row in csv.reader(csv_file,

我有一个文件“data.csv”,看起来像

ColA, ColB, ColC
1,2,3
4,5,6
7,8,9
我想打开文件列并将其读入列表,省略该列表的第一个条目,例如

dataA = [1,4,7]
dataB = [2,5,8]
dataC = [3,6,9]
实际上,有超过3列,列表非常长,这只是格式的一个示例。我试过:

csv_file = open('data.csv','rb')
csv_array = []

for row in csv.reader(csv_file, delimiter=','):
    csv_array.append(row)
然后,我会将csv_数组的每个索引分配给一个列表,例如

dataA = [int(i) for i in csv_array[0]]
但我有一些错误:

_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
而且,它感觉像是一种非常冗长的方式,只是将数据保存到几个列表中

谢谢

编辑:

我是这样解决的:

import pandas as pd

df = pd.read_csv('data.csv', names = ['ColA','ColB','ColC']

dataA = map(int,(df.ColA.tolist())[1:3])

并对其余列重复此操作。

似乎csv文件中有OSX行结尾。尝试将csv文件保存为Windows逗号分隔的.csv格式

还有更简单的方法来完成您使用csv阅读器所做的工作:

csv_array = []
with open('data.csv', 'r') as csv_file:
    reader = csv.reader(csv_file)
    # remove headers
    reader.next() 
    # loop over rows in the file, append them to your array. each row is already formatted as a list.
    for row in reader:
        csv_array.append(row)

然后可以设置dataA=csv\u array[0]

跳过标题,在单独的行上创建读卡器。然后,要将行列表转换为列列表,请使用zip:

给你:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
因此,如果需要:

dataA = data[0]
使用熊猫:

import pandas as pd

df = pd.DataFrame.from_csv(path)
rows = df.apply(lambda x: x.tolist(), axis=1)

首先,如果使用csv.readercsv_文件(分隔符=',')读取csv文件,则仍将读取头

csv_数组[0]将是标题行->['ColA'、'ColB'、'ColC']

此外,如果您使用的是mac,则此处已提到此问题:

如果你想用这些数据做更多的分析,我建议你改用pandas&numpy。它将csv文件读取到数据帧。

为了让那些试图解决类似问题的人明白这一点,也许没有熊猫,这里有一个带注释的简单重构

导入csv 以“r”模式而不是“rb”模式打开文件 csv\u文件=打开'data.csv','r' 数据a=[] 数据=[] dataC=[] 读取并放弃第一行,以跳过标题 csv_file.readline 阅读时拆分列 对于csv.readercsv_文件中的a、b、c,分隔符=',': 将每个变量附加到单独的列表中 附录A 数据附录B 数据附录 这对于将单个字段转换为数字没有任何作用,如果您需要的话,可以使用appendinta等,但应该足够明确和灵活,向您展示如何适应新的要求。

使用csv.DictReader选择特定的列

dataA = []
dataB = []
with open('data.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file, delimiter=',')    
    for row in csv_reader:
        dataA.append(row['ColA'])
        dataB.append(row['ColB'])

如果您不介意使用导入,我建议使用tablib,您可以在这里找到:该文件是从excel导出的,据我所知,它只是一个普通的.csv文件……好的,这几乎可以工作了,但我得到的是行而不是列,即dataA=[1,2,3],我想要dataA=[1,4,7],很抱歉遗漏了问题的这一部分。您只需使用zip进行转置:csv_数组=zipcsv_数组[0]、csv_数组[1]、csv_数组[2]。可能有更简单的方法,但我认为这是最详细、最容易获得的方法。当csv包含电池时,为什么要使用pandas?从版本0.21.0起已弃用:改用pandas.read_csv。例如:pd.read\u csvpath
dataA = []
dataB = []
with open('data.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file, delimiter=',')    
    for row in csv_reader:
        dataA.append(row['ColA'])
        dataB.append(row['ColB'])