将csv文件的列附加到列表

时间:2014-04-02 09:18:34

标签: python list python-2.7 csv append

我有一个数据集,它是在制表符分隔文件中格式化的。我想要完成的是将该文件的一些列附加到不同的列表。

我正在阅读的文件有点像这样:

   temperature  station.id  latitude    longtitude  sea.distance    altitude

1               S7          0            4          0               75
2               S8          1            5          3               400
3               S8          1.5          2          4               80

请注意,第一列是索引值,没有标题,而第二列temperature没有值。

现在我使用csv.reader(infile, delimiter="\t")来阅读文件,append创建columns列表。事实证明,这是完全错误的。

columns = []

for column in csv.reader(infile, delimiter="\t"):
            columns.append(column)

我已经搜索了一下,我发现了一些可能(或可能不会)这个技巧的功能和方法,但我不确定应该使用哪一个。 有什么建议?提前致谢

修改:结果应该像我想的那样:

lat = [0,1,1.5]

latitude

的列表 到目前为止

代码:

#!/usr/bin/env Python

import csv

columns = []

with open("/path/to/file/file.txt") as infile:    

    for row in csv.reader(infile, delimiter="\t"):
        columns.append(row[1])
        print columns

Edit2 print row给出了这个:

['', 'temperature', 'station.id', 'latitude', 'longtitude', 'sea.distance', 'altitude']
[]
['1', '', '', '', 'S7', '0', '', '4', '', '0', '', '75']
['2', '', '', '', 'S8', '1', '', '5', '', '3', '', '400']
['3', '', '', '', 'S8', '1.5', '', '2', '', '4', '', '80']

2 个答案:

答案 0 :(得分:0)

columns = []
for row in csv.reader(infile, delimiter="\t"):
    columns.append(row[1])   # here row[1] is the second column

答案 1 :(得分:0)

尝试以下方法:

>>> with open("test.csv", "rb") as f:
...     latitudes = [x[5] for x in csv.reader(f, delimiter="\t") if x]
...     
... 
>>> latitudes
['0', '1', '1.5']

csv.reader遍历csv文件的。如果行存在(或者不评估为False,例如空列表),代码将从每行中获取每六个项目(记住,索引从0开始)。它是使用list comprehension完成的。您可以将该列表理解编写为常规for循环:

>>> for row in csv.reader(f, delimiter="\t"):
...    if row:
...        latitudes.append(row[5])
...
...

编辑:您的示例数据似乎有一堆额外的标签。我已经更新了答案以考虑到这一点。您应该修改输入文件,除非您想遇到更多问题。

如果您清理输入文件,可以将数据转换为pandas.DataFrame。这样可以轻松操作和访问csv数据。这是一个例子:

>>> data = pandas.DataFrame.from_csv("/tmp/test.csv", sep="\t")
>>> print data
index  temperature station.id  latitude  longtitude  sea.distance   altitude

NaN            NaN        NaN       NaN         NaN            NaN       NaN
 1             NaN         S7       0.0           4              0        75
 2             NaN         S8       1.0           5              3       400
 3             NaN         S8       1.5           2              4        80

[4 rows x 6 columns]

>>> data['latitude']
index
NaN      NaN
 1       0.0
 2       1.0
 3       1.5
Name: latitude, dtype: float64
>>>