以Numpy格式导出ISO日期

2024-06-26 04:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,有一个基本问题我在网上找不到解决方案。在

我有一张桌子叫IBTsample.txt文件,包含:

  • 季节,等时,纬度,经度,枚举
  • 20092009-12-24 12:00:00,6.50,85.00,2
  • 20092009-12-25 06:00:00,8.00,84.50,6
  • 20092009-12-25 00:00:00,7.00,84.50,4
  • 20092009-12-24 18:00:00,6.50,85.00,3
  • 20092009-12-24 09:00:00,6.50,85.00,1
  • 20092009-12-25 03:00:00,7.00,84.50,5

我想做的是将它作为numpy数组导入,进行一些处理(目前只是对记录par date进行排序),然后将处理后的表导出到一个新的.txt文件中。在

from numpy import *
import pylab

rawtable = loadtxt('IBTsample.txt', delimiter=',', skiprows=1, converters=    {1:pylab.datestr2num},\
               dtype={'names':('Season','ISO_time','Latitude','Longitude','Enum'),\
                      'formats':('uint16','float','float16','float16','uint8')})
sortable = (sort(rawtable, order=('ISO_time'))).copy()
savetxt('IBTsorted.txt', sortable, fmt='%d,%.3f,%.1f,%.1f,%d')

我要用pylab.datestr2num函数在导入期间,但找不到反向函数以ISO格式导出日期和时间。在

任何帮助或想法都是有益的。在


Tags: 文件函数importnumpytxttimeiso解决方案
2条回答

您可以使用matplotlib.dates.num2date将num转换回datetime对象。然后调用isoformat()以ISO-8601格式的字符串形式获取日期。在

import numpy as np
import matplotlib.dates as md

def num2isodate(num):
    result=md.num2date(num).isoformat()
    return result

rawtable = np.loadtxt(
    'IBTsample.txt', delimiter=',', skiprows=1,
    converters= {1:md.datestr2num},
    dtype={'names':['Season','ISO_time','Latitude','Longitude','Enum'],
           'formats':['uint16','float','f4','f4','uint8']})

ISO_time数据类型转换为object。这允许列先保存浮点值,然后再保存字符串。注意,astype(下面)返回一个副本,因此不再需要显式地调用copy。另外,由于您调用了copy,我假设在内存中保存两个数组副本不是问题。(如果内存紧张,我们可以使用csv模块逐行编写数组,而不是使用np.savetxt。但由于内存不是问题,np.savetxt更方便。)

^{pr2}$

我建议不要使用from module import *,尤其是当module是{}时。它覆盖了许多Python内置函数,如absallanyminmaxsumround等。这不仅增加了调用Python内置函数的难度,而且还使编写看起来正确但包含难以发现或细微错误的代码变得容易。在

除了@unutbu的答案,如果您使用的是最新版本的numpy(>= 1.7),还有一个原生日期数据类型。在

在这种情况下,请尝试以下方法:

import numpy as np
import dateutil.parser

rawtable = np.genfromtxt('test_in.txt', names=True, delimiter=',', 
                converters={1:dateutil.parser.parse},
                dtype=[np.uint16, np.datetime64, np.float, np.float, np.uint8])

sorttable = np.sort(rawtable, order=('ISO_time'))

with open('test_out.txt', 'w') as outfile:
    outfile.write(','.join(sorttable.dtype.names) + '\n')
    np.savetxt(outfile, sorttable, fmt='%i,%r,%f,%f,%i')

这就产生了:

^{pr2}$

相关问题 更多 >