【问题标题】:reading file & joining two columns in numpy array读取文件并加入 numpy 数组中的两列
【发布时间】:2013-01-18 13:59:57
【问题描述】:

我有一个文本数据,例如:
16/12/2006;17:24:00;1.000;17.000
第一列是日期,第二列是时间,剩下的只是一些浮点数。现在我正在阅读这样的文件:

np.genfromtxt(path,
              dtype=(np.datetime64, np.datetime64, np.float16, np.float16),
              delimiter=';',
              converters = {0: lambda x: datetime.datetime.strptime(x, "%d/%m/%Y"),
                            1: lambda x: datetime.datetime.strptime(x, "%H:%M:%S")})

这会导致非常基本的问题,即第二列的默认日期设置为 1900 年 1 月 1 日。有没有办法在读取文件时或读取文件后结合前两列的日期和时间。

【问题讨论】:

  • 除非您已经习惯了这种方法,否则我建议您改用pandas。 pd.read_csv("twodate.csv", header=None, sep=";", parse_dates=[[0,1]]) Just Works(tm)。
  • @DSM 这让我很好奇 Panda 在 Python 统计计算方面的现状如何。我认为 scipy 和 numpy 应该非常灵活地处理这种情况。

标签: python datetime numpy genfromtxt


【解决方案1】:

您可以使用纯 Python 命令读取它并自己创建连接字段。然后,如果需要,您可以在其上运行转换器:

from datetime import datetime

fp = open("test.dat", "r")
lines = [ line.split(";") for line in fp.readlines() ]
fp.close()
fulldates = [ " ".join(line[0:2]) for line in lines if len(line) > 1 ]
converted = [ datetime.strptime(date, "%d/%m/%Y %H:%M:%S")
              for date in fulldates ]

列表fulldates 将包含已连接数据+时间字段的列表。列表converted 将包含初始化的日期时间对象。 (我添加了if len(line) > 1 过滤器只是为了处理文件中最终的空行。如果您的文件不包含任何空行,则可以省略它。)

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 2018-06-26
    • 2017-09-23
    • 2013-12-08
    • 1970-01-01
    • 2019-08-24
    • 2018-03-25
    • 2017-12-23
    • 2018-05-04
    相关资源
    最近更新 更多