2015-12-07 70 views
0

我是python的新手。 我想从* .csv文件中抓取整列。 为了做到这一点,我看到我最好的办法是将我的csv转换为2-dim。使用数组:Python从CSV文件中抓取整个列,忽略逗号用双引号

> import numpy as np 
    > csv=np.genfromtxt(file_name.csv, delimeter=",") 

,比例如,如果我要抢8个列只是写:

column8=csv[:,7]

我的问题是,我有领域,在双引号,用逗号在其中,所以我有一个ValueError:

ValueError: Some errors were detected !

Line #6 (got 16 columns instead of 15) 

Line #21 (got 16 columns instead of 15) 

Line #45 (got 18 columns instead of 15) 

etc. 

所以我要的是,例如,如果这是我的CSV:

a,b,c,d

f,g,h,"i,j"

k,l,m,"n,o,p"

所以如果比如我要抢4个专栏中,我想答案是:

d

i,j

n,o,p

任何想法吗?

谢谢!!!

回答

0

熊猫非常适合从csv文件中读取。

尝试使用:

df = pandas.read_csv("filename.csv", delimeter=",") # header=None) 

在此之后,访问一列

df['colname'] # or df[col_ind] if you set header=None 
+0

嗨,但我怎么忽略逗号在双引号,以及我如何抓整列? –

+0

默认情况下,它忽略双引号中的逗号。你可以使用param quotechar来指定另一个行为。 – alexey

+0

并且,设置'header = None'不使用第一行作为列名 – alexey

0

使用熊猫包将解决您的问题。由于熊猫有各种方法可供我们读取不同的文件格式。

import pandas as pd 
    df = pd.read_csv("filename.csv") 
    print df[column4] 
+0

嗨,但是如果我想通过它的号码而不是它的名字来抓取列呢? (即df [:,3]而不是df [column3])? –

+0

您可以使用df.ix [:,3] –

1

Python的内置csv模块很好地处理了默认设置。所以这应该只是工作:

import csv 
with open("file_name.csv", "r", newline='') as f: 
    reader = csv.reader(f) 
    column8 = [row[7] for row in reader] 

这是module's documentationfirst example略有变化,其中包含其他有用信息。

0

类似于taleinat的解决方案,但是如果你知道header_name并且想返回一个列表。

import csv 

with open(FILENAME, "rb") as MEDIA: 
headers = [] 
columns = [] 
required_header = "name" 
csv_file = csv.reader(MEDIA, quoting=csv.QUOTE_NONE, delimiter=DELIMITER) 
for row in csv_file: 
    headers = row[:] 
    break 
position = headers.index(required_header) 
[columns.append(row[position]) for row in csv_file] 
return columns 
相关问题