如何读取带有时间戳字段的 csv?

Posted

技术标签:

【中文标题】如何读取带有时间戳字段的 csv?【英文标题】:how to read a csv with a timestamp field? 【发布时间】:2014-12-02 19:53:26 【问题描述】:

我正在尝试导入一个 csv 文件,该文件的字段 Ts 包含 ISO8601 时间戳值(例如 2014-12-01T18:54:22.973+0000)。

我看到你可以指定列的类:

kd <- read.csv( "my.csv", colClasses=c( "Ts"="?"  ))

但是,我找不到如何声明时间戳字段。

问题:如何指定此字段为时间戳?

【问题讨论】:

您需要使用setAs 来创建一个可以处理该colClass 的函数。例如:***.com/a/3611619/967840、***.com/a/10823641/967840 【参考方案1】:

如果要将 .csv 文件直接读入时间序列对象,可以使用 zoo 包中的函数 read.zoo()。这在内部调用read.table()(而不是read.csv),然后转换指定的时间索引列。请参阅?read.zoovignette("zoo-read", package = "zoo")

一个像你这样的时间戳的例子是:

csv <-
"x,y,timestamp
0,1,2014-12-01T18:54:22.973+0000
1,2,2014-12-01T19:43:11.862+0000"
read.zoo(text = csv, sep = ",", header = TRUE, index = "timestamp",
  format = "%Y-%m-%dT%H:%M:%OS%z", tz = "GMT")

这会产生一个带有POSIXct 时间戳的zoo 系列:

                    x y
2014-12-01 18:54:22 0 1
2014-12-01 19:43:11 1 2

(当然,如果您从磁盘读取 .csv 文件而不是从 R 中读取文本字符串,text = csv 必须替换为 file = "my.csv" 之类的东西。)

【讨论】:

【参考方案2】:

不知道直接在阅读时执行此操作的方法,但作为一种解决方法(直到有人更有知识的答案),您可以在后面进行转换:

kd <- read.csv("my.csv")
%  Assume that the timestamp column in the csv file has the header 'timestamp'

kd$newtimestamp <- strptime(kd$timestamp,format="%FT%H:%M:%OS%z")

%  By default this will convert all times to your timezone 
%  but you can control the conversion through the tx argument e.g. tx='GMT' 

【讨论】:

以上是关于如何读取带有时间戳字段的 csv?的主要内容,如果未能解决你的问题,请参考以下文章

如何以自定义格式加载带有时间戳的 CSV?

如何将 pandas 时间戳添加到数据帧 post read_csv

读取悖论时间戳字段

如何处理mysql中的时间戳读取问题

带有 GAWK 的 CSV 文件中的 Epoch 时间戳

如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?