使用python从列中获取数据而不使用pyexcel或其他库

时间:2015-11-27 00:16:30

标签: python

我正在尝试分析我目前以.csv格式存储的大型数据集。我想将第3列中的数据存储到小时,分钟和秒字段中,然后执行一些计算。

Data set to be analysed

我通常不在python中工作,我能找到的大多数解决方案建议使用pyexcel或astropy等库。但是,我给予工作的机器没有这些包。我无法获得安装任何软件包的权限,并且被告知我必须使用我可用的软件。如何仅使用python语言和pylab执行任务?

1 个答案:

答案 0 :(得分:1)

您可以使用csv reader创建一次读取一行的函数,然后生成所需的值。这使得该函数成为一个生成器,它只能有效地读取和使用每行所需的内存。

第4列(第3列从零开始计算)中所需的值是空格分隔值,您可以将其拆分并映射到浮点数(如果您愿意,可以使用更复杂的值):

>>> hms = '03 26 02.785'
>>> hms.split()
['03', '26', '02.785']

>>> map(float, _)
[3.0, 26.0, 2.785]

共:

import csv

def hours_minutes_seconds(filelike):
    for line in csv.reader(filelike):
        RAJ2000 = line[3]
        yield map(float, RAJ2000.split())

csv.reader需要一个类文件对象(或任何可返回字符串的迭代),因此我们可以使用StringIO对其进行测试。

用法:

>>> import StringIO
>>> contents = StringIO.StringIO("""1,1,C001,03 26 02.785
... 2,2,C002,03 26 04.152""")

>>> for hms in hours_minutes_seconds(contents):
...     print hms
[3.0, 26.0, 2.785]
[3.0, 26.0, 4.152]