我有一个数据集,它是在制表符分隔文件中格式化的。我想要完成的是将该文件的一些列附加到不同的列表。
我正在阅读的文件有点像这样:
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']
答案 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
>>>