使用Python或R在CSV中标识和写入丢失的小时数据的丢失时间戳的代码
我有一些使用Python和R的经验。我面临的问题是,对于各个站点丢失的每小时数据,时间戳也丢失了。由于文件很大(从2017年到2020年),手动操作将非常繁琐。我正在尝试编写一个代码,它将在CSV文件中运行,为丢失的数据识别丢失的时间戳,并插入带有NA或blank作为值的时间戳。有人能帮我吗?我已经附上了原始数据的样本图片,以及我希望它是怎样的。我将非常感谢任何帮助使用Python或R在CSV中标识和写入丢失的小时数据的丢失时间戳的代码,python,r,timestamp,Python,R,Timestamp,我有一些使用Python和R的经验。我面临的问题是,对于各个站点丢失的每小时数据,时间戳也丢失了。由于文件很大(从2017年到2020年),手动操作将非常繁琐。我正在尝试编写一个代码,它将在CSV文件中运行,为丢失的数据识别丢失的时间戳,并插入带有NA或blank作为值的时间戳。有人能帮我吗?我已经附上了原始数据的样本图片,以及我希望它是怎样的。我将非常感谢任何帮助 在R中,您可以使用dplyr::complete()实现此目的: library(tidyverse) #includes dpl
在R中,您可以使用
dplyr::complete()
实现此目的:
library(tidyverse) #includes dplyr
# generate dummy full dataset
full_data <- tibble(Date = as.Date(1:24),
Hour = 1:24) %>%
expand(Date, Hour) %>%
mutate(Acc = rnorm(nrow(.)))
full_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 0.453
# 2 1970-01-02 2 -0.0518
# 3 1970-01-02 3 0.882
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 0.610
# 10 1970-01-02 10 1.29
# remove some timestamps that are missing
data_with_missing <- full_data %>%
slice_sample(n=200)
data_with_missing
# A tibble: 200 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-04 4 0.683
# 2 1970-01-02 6 0.454
# 3 1970-01-24 10 -1.67
# 4 1970-01-12 6 1.12
# 5 1970-01-13 5 -0.786
# 6 1970-01-04 3 -2.03
# 7 1970-01-11 22 1.02
# 8 1970-01-11 15 1.11
# 9 1970-01-18 22 0.688
# 10 1970-01-24 14 -0.00612
# ... with 190 more rows
# Now use complete to fill in the missing data
recompleted_data <- data_with_missing %>%
complete(Date, Hour)
recompleted_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 NA
# 2 1970-01-02 2 NA
# 3 1970-01-02 3 NA
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 NA
# 10 1970-01-02 10 NA
# ... with 566 more rows
# Check that we have the same combinations as in the full dataset
all.equal(full_data[,1:2], recompleted_data[,1:2])
# TRUE
library(tidyverse)#包括dplyr
#生成虚拟完整数据集
完整数据%
展开(日期,小时)%>%
突变(Acc=rnorm(nrow())
完整数据
#一个tibble:576x3
#日期小时Acc
#
# 1 1970-01-02 1 0.453
# 2 1970-01-02 2 -0.0518
# 3 1970-01-02 3 0.882
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 0.610
# 10 1970-01-02 10 1.29
#删除丢失的一些时间戳
缺少%u的数据\u
切片样本(n=200)
数据_,缺少_
#一个tibble:200x3
#日期小时Acc
#
# 1 1970-01-04 4 0.683
# 2 1970-01-02 6 0.454
# 3 1970-01-24 10 -1.67
# 4 1970-01-12 6 1.12
# 5 1970-01-13 5 -0.786
# 6 1970-01-04 3 -2.03
# 7 1970-01-11 22 1.02
# 8 1970-01-11 15 1.11
# 9 1970-01-18 22 0.688
# 10 1970-01-24 14 -0.00612
# ... 还有190行
#现在使用complete来填充缺少的数据
重新完成的_数据%
完成(日期、小时)
重新完成的_数据
#一个tibble:576x3
#日期小时Acc
#
#1 1970-01-02 1 NA
#2 1970-01-02 2 NA
#3 1970-01-02 3 NA
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
#9 1970-01-02 9 NA
#10 1970-01-02 10北美
# ... 还有566行
#检查我们的组合是否与完整数据集中的组合相同
全部相等(完整数据[,1:2],重新完成数据[,1:2])
#真的
在R中,您可以使用dplyr::complete()
library(tidyverse) #includes dplyr
# generate dummy full dataset
full_data <- tibble(Date = as.Date(1:24),
Hour = 1:24) %>%
expand(Date, Hour) %>%
mutate(Acc = rnorm(nrow(.)))
full_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 0.453
# 2 1970-01-02 2 -0.0518
# 3 1970-01-02 3 0.882
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 0.610
# 10 1970-01-02 10 1.29
# remove some timestamps that are missing
data_with_missing <- full_data %>%
slice_sample(n=200)
data_with_missing
# A tibble: 200 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-04 4 0.683
# 2 1970-01-02 6 0.454
# 3 1970-01-24 10 -1.67
# 4 1970-01-12 6 1.12
# 5 1970-01-13 5 -0.786
# 6 1970-01-04 3 -2.03
# 7 1970-01-11 22 1.02
# 8 1970-01-11 15 1.11
# 9 1970-01-18 22 0.688
# 10 1970-01-24 14 -0.00612
# ... with 190 more rows
# Now use complete to fill in the missing data
recompleted_data <- data_with_missing %>%
complete(Date, Hour)
recompleted_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 NA
# 2 1970-01-02 2 NA
# 3 1970-01-02 3 NA
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 NA
# 10 1970-01-02 10 NA
# ... with 566 more rows
# Check that we have the same combinations as in the full dataset
all.equal(full_data[,1:2], recompleted_data[,1:2])
# TRUE
library(tidyverse)#包括dplyr
#生成虚拟完整数据集
完整数据%
展开(日期,小时)%>%
突变(Acc=rnorm(nrow())
完整数据
#一个tibble:576x3
#日期小时Acc
#
# 1 1970-01-02 1 0.453
# 2 1970-01-02 2 -0.0518
# 3 1970-01-02 3 0.882
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 0.610
# 10 1970-01-02 10 1.29
#删除丢失的一些时间戳
缺少%u的数据\u
切片样本(n=200)
数据_,缺少_
#一个tibble:200x3
#日期小时Acc
#
# 1 1970-01-04 4 0.683
# 2 1970-01-02 6 0.454
# 3 1970-01-24 10 -1.67
# 4 1970-01-12 6 1.12
# 5 1970-01-13 5 -0.786
# 6 1970-01-04 3 -2.03
# 7 1970-01-11 22 1.02
# 8 1970-01-11 15 1.11
# 9 1970-01-18 22 0.688
# 10 1970-01-24 14 -0.00612
# ... 还有190行
#现在使用complete来填充缺少的数据
重新完成的_数据%
完成(日期、小时)
重新完成的_数据
#一个tibble:576x3
#日期小时Acc
#
#1 1970-01-02 1 NA
#2 1970-01-02 2 NA
#3 1970-01-02 3 NA
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
#9 1970-01-02 9 NA
#10 1970-01-02 10北美
# ... 还有566行
#检查我们的组合是否与完整数据集中的组合相同
全部相等(完整数据[,1:2],重新完成数据[,1:2])
#真的
您写道您正在“尝试编写代码”。请将其张贴在此处,以便有人可以帮助您调试。老实说,我不知道如何开始编写此问题的代码。我刚刚根据pandas教程编写了一个基本的python代码。丢失数据是什么意思?这是否意味着你有一个带有“间隙”的时间序列?原则上,我建议将csv
加载到pandas.DataFrame
中,进行处理并返回到csv(或任何您需要的内容)。只需谷歌“读取熊猫的csv文件”就可以开始了……作为提示,您可能希望查找的是重新采样(在您的情况下为每小时一次),如图所示。谢谢。我会尝试使用重采样,你写的,你是“试图写代码”。张贴在这里,这样有人可以帮助你调试它。老实说,我不知道如何开始写这个问题的代码。我刚刚根据pandas教程编写了一个基本的python代码。丢失数据是什么意思?这是否意味着你有一个带有“间隙”的时间序列?原则上,我建议将csv
加载到pandas.DataFrame
中,进行处理并返回到csv(或任何您需要的内容)。只需谷歌“读取熊猫的csv文件”就可以开始了……作为提示,您可能希望查找的是重新采样(在您的情况下为每小时一次),如图所示。谢谢。我会试着用重采样,阿列克斯洛克!有了这些代码,我可以在最初列出的日期中填写缺失的小时数。但是,如果日期完全丢失,代码将无法检测到丢失的日期和小时。因此,由于缺少日期,我有很多空白。如何修改代码以检测丢失的日期?在定义初始TIBLE时,您可以使用任何对您实用的规范,而不是我的示例中的date=as.date(1:24)
。例如:beg Hi Alexlok!有了代码,我可以在dat中填写缺失的小时数