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

时间:2017-10-13 14:44:54

标签: 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, delimiter=','):
    csv_array.append(row)

然后我将csv_array的每个索引分配到一个列表,例如

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

并重复其余列。

6 个答案:

答案 0 :(得分:3)

只是为试图解决类似问题的人(可能没有熊猫)讲清楚这一点,这是一个带有注释的简单重构。

import csv

# Open the file in 'r' mode, not 'rb'
csv_file = open('data.csv','r')
dataA = []
dataB = []
dataC = []

# Read off and discard first line, to skip headers
csv_file.readline()

# Split columns while reading
for a, b, c in csv.reader(csv_file, delimiter=','):
    # Append each variable to a separate list
    dataA.append(a)
    dataB.append(b)
    dataC.append(c)

这无助于将各个字段转换为数字(如果需要,请使用append(int(a))等),但应该足够明确和灵活,以向您展示如何使其适应新的要求。

答案 1 :(得分:1)

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

import csv

with open('data.csv', 'rb') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)
    data = zip(*[map(int, row) for row in csv_input])

print data

给你:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

所以如果需要的话:

dataA = data[0]

答案 2 :(得分:1)

使用熊猫:

import pandas as pd

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

答案 3 :(得分:0)

好像你的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_array[0]

答案 4 :(得分:0)

首先,如果您使用csv.reader(csv_file,delimiter =',')读取csv文件,您仍然会读取标题。

csv_array [0]将是标题行 - > ['ColA','ColB','ColC']

此外,如果您使用的是mac,则此问题已在此处引用:CSV new-line character seen in unquoted field error

如果您要使用数据进行更多分析,我建议您使用pandas& numpy。它将csv文件读取为pandas dataframe。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

答案 5 :(得分:0)

使用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'])