簡體   English   中英

Python將csv文件列讀入列表,忽略標題

[英]Python read csv file columns into lists, ignoring headers

我有一個文件“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])

並重復其余的列。

為了向試圖解決類似問題的人們說明這一點,也許沒有 Pandas,這里有一個簡單的帶有注釋的重構。

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))如果需要,可以使用append(int(a))等),但希望應該足夠明確和靈活,以向您展示如何使其適應新的要求。

使用熊貓:

import pandas as pd

df = pd.DataFrame.from_csv(path)
rows = df.apply(lambda x: x.tolist(), axis=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]

好像您的 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]

首先,如果您使用 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 數據幀。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

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

暫無
暫無

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

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