将CSV文件的列添加到列表中
我有一个数据集,它是用制表符分隔的文件格式。我想做的是将这个文件中的一些列数据,添加到不同的列表中。
我正在读取的文件大概是这样的:
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
编辑2: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
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
>>>