Python-将CSV列四舍五入至最接近30分钟

Python-将CSV列四舍五入至最接近30分钟,python,python-3.x,pandas,datetime,dataframe,Python,Python 3.x,Pandas,Datetime,Dataframe,我的CSV数据如下所示: 列: from datetime import datetime, timedelta def ceil_dt(month, day, hourWithMinutes, delta): hour,minutes = hourWithMinutes.split(':') int(month) int(day) int(hour) int(minutes) dt = datetime.datetime(month=month, day

我的CSV数据如下所示:

列:

from datetime import datetime, timedelta

def ceil_dt(month, day, hourWithMinutes, delta):
   hour,minutes = hourWithMinutes.split(':')
   int(month)
   int(day)
   int(hour)
   int(minutes)

   dt = datetime.datetime(month=month, day=day, hour=hour, minute=minutes)
   return dt + (datetime.min - dt) % delta
  • 碰撞月(如“1”)
  • 碰撞日(如“1”)
  • 时间TR(例如“8:40”)
希望的结果:

from datetime import datetime, timedelta

def ceil_dt(month, day, hourWithMinutes, delta):
   hour,minutes = hourWithMinutes.split(':')
   int(month)
   int(day)
   int(hour)
   int(minutes)

   dt = datetime.datetime(month=month, day=day, hour=hour, minute=minutes)
   return dt + (datetime.min - dt) % delta
一个名为“CRASH_DATETIME”的新列,其中包含一个基于相应日期的
DATETIME
Python对象。年份不重要,主要目标是按月、日和小时(分钟)追踪车祸,精确到30分钟

尝试了以下操作,但失败:

from datetime import datetime, timedelta

def ceil_dt(month, day, hourWithMinutes, delta):
   hour,minutes = hourWithMinutes.split(':')
   int(month)
   int(day)
   int(hour)
   int(minutes)

   dt = datetime.datetime(month=month, day=day, hour=hour, minute=minutes)
   return dt + (datetime.min - dt) % delta

dataInitial['TIME']=dataInitial.apply(lambda行:ceil_dt(行['CRASH_MONTH']、行['CRASH_DAY']、行['TIMESTR']、'30'))

但失败(使用Jupyter笔记本):

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
pandas/_libs/index.pyx在pandas中。_libs.index.IndexEngine.get_loc(pandas/_libs/index.c:5126)()
pandas/_libs/hashtable\u class\u helper.pxi在pandas中。_libs.hashtable.Int64HashTable.get\u项(pandas/_libs/hashtable.c:14010)()
TypeError:需要一个整数
在处理上述异常期间,发生了另一个异常:
KeyError回溯(最近一次呼叫最后一次)
在()
---->1 dataInitial['TIME']=dataInitial.apply(lambda行:ceil_dt(行['CRASH_-MONTH']、行['CRASH_-DAY']、行['TIMESTR']、'30'))
应用中的~/anaconda2/envs/tfdeeplearning/lib/python3.5/site-packages/pandas/core/frame.py(self、func、axis、broadcast、raw、reduce、args、**kwds)
轴线4260楼,
4261减少=减少,
->4262忽略故障=忽略故障)
4263其他:
4264返回自应用广播(f轴)
~/anaconda2/envs/tfdeeplearning/lib/python3.5/site-packages/pandas/core/frame.py在应用标准中(self、func、axis、忽略故障、reduce)
4356请尝试:
4357用于枚举中的i、v(系列):
->4358结果[i]=func(v)
4359键。追加(v.name)
4360例外情况除外,如e:
在行
---->1 dataInitial['TIME']=dataInitial.apply(lambda行:ceil_dt(行['CRASH_-MONTH']、行['CRASH_-DAY']、行['TIMESTR']、'30'))
~/anaconda2/envs/tfdeeplearning/lib/python3.5/site-packages/pandas/core/series.py in\uuuuuu getitem\uuuuu(self,key)
599 key=com.\u如果可调用(key,self),则应用
600次尝试:
-->601结果=self.index.get_值(self,key)
602
603如果不是标量(结果):
获取值(self、series、key)中的~/anaconda2/envs/tfdeeplearning/lib/python3.5/site-packages/pandas/core/index/base.py
2475尝试:
2476返回自引擎。获取值(s,k,
->2477 tz=getattr(series.dtype,“tz”,无))
2478除键错误为e1外:
2479如果len(self)>0且self.u输入['integer','boolean']:
pandas/_libs/index.pyx在pandas中。_libs.index.IndexEngine.get_值(pandas/_libs/index.c:4404)()
pandas/_libs/index.pyx在pandas中。_libs.index.IndexEngine.get_值(pandas/_libs/index.c:4087)()
pandas/_libs/index.pyx在pandas中。_libs.index.IndexEngine.get_loc(pandas/_libs/index.c:5210)()
KeyError:(“崩溃月份”,“发生在索引崩溃日期”)

有什么想法吗?

您的函数在转换(未存储在变量中)、缺少年份和时间增量方面存在一些小问题。此版本的函数正常工作:

from datetime import datetime, timedelta

def ceil_dt(month, day, hourWithMinutes, delta):
    hour,minutes = hourWithMinutes.split(':')
    month = int(month)
    day = int(day)
    hour = int(hour)
    minutes = int(minutes)

    dt = datetime(year = 2019, month=month, day=day, hour=int(hour), minute=int(minutes))

    return dt + (datetime.min - dt) % timedelta(minutes=int(delta))

你在这里设置轴参数了吗?这里的轴应该是1,是的,同样的错误。明天将重新测试!谢谢谢谢你,丹尼尔。明天我会尽快回复你的!