【问题标题】:append columns of a csv file to lists将 csv 文件的列附加到列表中
【发布时间】:2014-05-13 11:04:07
【问题描述】:

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

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

   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

Edit2print 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']

【问题讨论】:

  • 完成后columns-list 应该是什么样子?
  • @msvalkon 我更新了我的问题以包含一个示例
  • 所以您想将lat = [0,1,1.5] 添加到latitude-列?
  • @msvalkon 一点也不。我的问题有那么糟糕吗?我想创建一个包含纬度列值的列表。
  • 抱歉,我查看了您数据中的错误列 :)

标签: python list python-2.7 csv append


【解决方案1】:

尝试以下方法:

>>> 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 开始)如果该行存在(或不评估为 False,例如空列表)。它使用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
>>> 

【讨论】:

  • 它给出了同样的错误IndexError: list index out of range
  • @KapelNick 是您的示例数据,实际上是您正在使用的数据还是您为这个问题手工制作的数据?你绝对确定它的制表符分隔。你能打印行吗? for row in csv.reader(infile, delimiter="\t"): print row
  • 这些是实际数据。 print row 工作得很好。在某些情况下可能有多个选项卡?
  • 更新了答案,看看吧。
  • 现在它可以工作了,但输出中没有显示零,['1','1.5']
【解决方案2】:
columns = []
for row in csv.reader(infile, delimiter="\t"):
    columns.append(row[1])   # here row[1] is the second column

【讨论】:

  • 它给出了一个错误IndexError: list index out of range
  • 我已经发布了回溯错误。代码在我的问题的底部
  • 在 for 循环中打印行[1]。这给了你什么?
  • 和以前一样 IndexError: list index out of range 可能与 temperature 为空有关?
  • 可能是因为您的文件格式。仅打印行。并查看输出。
猜你喜欢
  • 2016-04-08
  • 2017-06-30
  • 1970-01-01
  • 2019-11-06
  • 2016-06-04
  • 2021-11-02
  • 2018-05-11
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多