将CSV文件的列添加到列表中

1 投票
2 回答
6183 浏览
提问于 2025-04-18 00:59

我有一个数据集,它是用制表符分隔的文件格式。我想做的是将这个文件中的一些列数据,添加到不同的列表中。

我正在读取的文件大概是这样的:

   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

编辑2print 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
columns = []
for row in csv.reader(infile, delimiter="\t"):
    columns.append(row[1])   # here row[1] is the second column

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

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文件。这个代码从每一行中抓取每第六个项目(记住,索引是从0开始的),前提是这一行存在(也就是说,它不是空的)。它是通过一种叫做列表推导式的方式来实现的。你也可以把这个列表推导式写成一个普通的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
>>> 

撰写回答