2016-06-07 89 views
2

我有一个csv文件中的数据,它看起来像这样导入。Python - 将数据拆分为csv文件中的列

import csv 

with open('Half-life.csv', 'r') as f: 
    data = list(csv.reader(f)) 

数据会以这种形式出现在打印出像data[0] = ['10', '2', '2']等行的位置。

我想要的是虽然检索数据作为列而不是行,在这种情况下,有3列。

+4

你可以安装熊猫吗? 'pandas.read_csv('Half-life.csv')'会做到这一点,并为你推断适当的类型。 –

回答

2

您可以创建三个单独的列表,然后使用csv.reader附加到每个列表。

import csv 

c1 = [] 
c2 = [] 
c3 = [] 
with open('Half-life.csv', 'r') as f: 
    reader = csv.reader(f, delimiter=',') 
    for row in reader: 
     c1.append(row[0]) 
     c2.append(row[1]) 
     c3.append(row[2]) 
+0

''''''循环可以替换为'''columns = zip(* reader)'''。 – wwii

3

多一点自动化和柔性版的Alexander's answer

import csv 
from collections import defaultdict 

columns = defaultdict(list) 
with open('Half-life.csv', 'r') as f: 
    reader = csv.reader(f, delimiter=',') 
    for row in reader: 
     for i in range(len(row)): 
      columns[i].append(row[i]) 
# Following line is only necessary if you want a key error for invalid column numbers 
columns = dict(columns) 

你也可以修改此使用的列标题,而不是列编号。

import csv 
from collections import defaultdict 

columns = defaultdict(list) 
with open('Half-life.csv', 'r') as f: 
    reader = csv.reader(f, delimiter=',') 
    headers = next(reader) 
    column_nums = range(len(headers)) # Do NOT change to xrange 
    for row in reader: 
     for i in column_nums: 
      columns[headers[i]].append(row[i]) 
# Following line is only necessary if you want a key error for invalid column names 
columns = dict(columns) 
2

另一种选择,如果你有安装numpy,您可以使用loadtxt读取csv文件到numpy的阵列。如果你想要更多的列而不是行(你对数据的外观不太清楚),那么你可以转置数组。例如:

import numpy as np 
# Load data 
data = np.loadtxt('csv_file.csv', delimiter=',') 
# Transpose data if needs be 
data = np.transpose(data)