我有一个文件,其中包含一些列,第二列是时间。就像我在下面显示的一样。我需要在第一个文件中的时间列中添加一个以秒为单位的时间列:“ 2.13266 2.21784 2.20719 2.02499 2.16543”。我的问题是如何将这两个时间相加。也许在某些情况下,当我添加这些时间时,它会转到第二天,在这种情况下,如何更改相关行中的日期。
2014-08-26 19:49:32 0
2014-08-28 05:43:21 0
2014-08-30 11:47:54 0
2014-08-30 03:26:10 0
答案 0 :(得分:0)
最简单的方法可能是将文件读入pandas数据帧,并将每一行解析为datetime
对象。然后,您创建一个datetime.timedelta
对象,并传递小数秒。
一个datetime
对象+一个timedelta
可以很好地处理几天,因此无需任何其他代码即可正常工作。最后,将更新的数据框写回文件。
答案 1 :(得分:0)
确保您的datetime字段是实际的日期时间(如果不是从csv读取的话)。
df['DateTimeField'] = pd.to_datetime(df['DateTimeField'])
然后,将秒列转换为时间增量列,然后添加到日期时间字段
df['NewDateTimeField'] = df['DateTimeField'] + pd.to_timedelta(df['TimeDeltaField'], unit='s')
答案 2 :(得分:0)
好的。最后,通过以下代码完成:
library(shiny)
library(leaflet)
ui <- fluidPage(leafletOutput("map"))
myicon=function(condition){
makeIcon(
iconUrl = paste0(condition,".png"),
iconWidth = 30, iconHeight = 80
)}
server <- function(input, output, session) {
lats = c(69.5, 70.0, 69.0)
lons = c(33.0,33.5,34.3)
vals = c(7,12,5)
df = data.frame(lats, lons, vals)
for (i in 1:nrow(df)) {
png(file=paste0(i,".png"), bg="transparent",width=3, height=10, units="in", res=72)
bp <- barplot(df$vals[i], height =10*df$vals[i],
width=1, ylim=c(0,max(10*df$vals)+30),col="brown4", axes=FALSE);
text(bp,10*df$vals[i]+20,labels=df$vals[i],cex=10,font=2);
dev.off()
}
output$map <- renderLeaflet({
top=70.4;
bottom=66.05;
right=42.05;
left=27.5;
leaflet(data = df,
options = leafletOptions(minZoom = 3,maxZoom = 10))%>%
fitBounds(right,bottom,left,top)%>%
addTiles()%>%
addProviderTiles("Esri.OceanBasemap") %>%
addMarkers(
icon = myicon(index(df)),
lng = lons, lat = lats,
options = markerOptions(draggable = TRUE))
})
}
shinyApp(ui, server)
d= 2.13266
dd= pd.to_timedelta (int(d), unit='s')
df= pd.Timestamp('2014-08-26 19:49:32')