例子:

df = pd.DataFrame()
df['A'] = [1, 1, 2]
df['B'] = [datetime.date(2018, 1, 2), datetime.date(2018, 1, 3), datetime.date(2018, 1, 3)]
df['C'] = df.groupby('A').B.diff()
df['C'] = df.C.dt.days

 

报错:

Traceback (most recent call last):
  File "D:\python_virtualenv\common\lib\site-packages\pandas-0.20.3-py3.6-win-amd64.egg\pandas\core\series.py", line 2820, in _make_dt_accessor
    return maybe_to_datetimelike(self)
  File "D:\python_virtualenv\common\lib\site-packages\pandas-0.20.3-py3.6-win-amd64.egg\pandas\core\indexes\accessors.py", line 84, in maybe_to_datetimelike
    "datetimelike index".format(type(data)))
TypeError: cannot convert an object of type <class 'pandas.core.series.Series'> to a datetimelike index During handling of the above exception, another exception occurred: Traceback (most recent call last):
  File "D:/学习/pandas_test/pandas_learn_20190102.py", line 49, in <module>
    test2()
  File "D:/学习/pandas_test/pandas_learn_20190102.py", line 32, in test2
    df['C'] = df.C.dt.days
  File "D:\python_virtualenv\common\lib\site-packages\pandas-0.20.3-py3.6-win-amd64.egg\pandas\core\generic.py", line 3077, in __getattr__
    return object.__getattribute__(self, name)
  File "D:\python_virtualenv\common\lib\site-packages\pandas-0.20.3-py3.6-win-amd64.egg\pandas\core\base.py", line 243, in __get__
    return self.construct_accessor(instance)
  File "D:\python_virtualenv\common\lib\site-packages\pandas-0.20.3-py3.6-win-amd64.egg\pandas\core\series.py", line 2822, in _make_dt_accessor
    raise AttributeError("Can only use .dt accessor with datetimelike "
AttributeError: Can only use .dt accessor with datetimelike values

原因:
分组求diff后的结果是:

A B C
0 1 2018-01-02 NaT
1 1 2018-01-03 1 days 00:00:00
2 2 2018-01-03 NaN

类型是:

A int64
B object
C object
dtype: object

预想的类型是:

A int64
B object
C timedelta64[ns]
dtype: object

解决:
原本尝试使用astype强制将object列,转成timedelta列

df['C'] = df.C.astype(pd.Timedelta)

这句代码不会报错,但是C列的类型不会改变,没有作用。

最后有两种处理方式:
提前定义B列为时间列:

df = pd.DataFrame()
df['A'] = [1, 1, 2]
df['B'] = [datetime.date(2018, 1, 2), datetime.date(2018, 1, 3), datetime.date(2018, 1, 3)]
df.B = pd.to_datetime(df.B)
df['C'] = df.groupby('A').B.diff()
df['C'] = df.C.dt.days

增加类型转换:

df = pd.DataFrame()
df['A'] = [1, 1, 2]
df['B'] = [datetime.date(2018, 1, 2), datetime.date(2018, 1, 3), datetime.date(2018, 1, 3)]
df['C'] = df.groupby('A').B.diff()
df['C'] = pd.to_timedelta(df.C, unit='d').dt.days

pandas对时间列分组求diff遇到的问题的更多相关文章

  1. pandas如何去掉时间列的小时只保留日期

    最近无聊,想玩玩数据挖掘,就拿天池的天池新人实战赛之[离线赛]练练手.https://tianchi.aliyun.com/getStart/information.htm?spm=5176.1000 ...

  2. Hive - - 分组求最大,最小(加行键)

    Hive - - 分组求最大,最小(加行键) 数据: 1325927 陕西 汉中 084 08491325928 陕西 汉中 084 08491325930 陕西 延安 084 08421325931 ...

  3. POJ-1180 Batch Scheduling (分组求最优值+斜率优化)

    题目大意:有n个任务,已知做每件任务所需的时间,并且每件任务都对应一个系数fi.现在,要将这n个任务分成若干个连续的组,每分成一个组的代价是完成这组任务所需的总时间加上一个常数S后再乘以这个区间的系数 ...

  4. pandas 新增数据列(直接赋值、apply,assign、分条件赋值)

    # pandas新增数据列(直接赋值.apply.assign.分条件赋值) # pandas在进行数据分析时,经常需要按照一定条件创建新的数据列,然后进行进一步分析 # 1 直接赋值 # 2 df. ...

  5. pandas处理csv,分组统计

    需求: /tmp/demo/data下有10个csv文件,按col0和col1分组分别统计col2和col3总和并计算col2和col3的商 # encoding:utf-8 import panda ...

  6. 第2节 网站点击流项目(下):3、流量统计分析,分组求topN

    四. 模块开发----统计分析 select * from ods_weblog_detail limit 2;+--------------------------+---------------- ...

  7. DataTable以列分组

    //DataTable以列分组 var result = from r in dt.AsEnumerable() group r by ), b = r.Field<) } into g sel ...

  8. Sqlite实现默认时间为当前时间列的方法(转)

    原文地址: http://blog.csdn.net/derryzhang/article/details/5033209 在SQL Server中,创建表格的时候,对于时间列有时候我们可以根据需要指 ...

  9. devexpress表格控件gridcontrol图片列,按钮列,时间列等特殊列的实现

    1.项目中经常会在表格中插入按钮列,图片列,表格列一些非文本的特殊列.如何在devexpress表格控件gridcontrol中实现呢?以下列举一个实现添加图片列,按钮列,时间列,按钮列,开关列的示例 ...

随机推荐

  1. 如何在Eclipse中写Processing的sketch

    有时候人们需要写更复杂的sketch,此时Processing提供的IDE就略显单薄,下面将介绍如何在eclipse中开发Processing. 一共分4步: 一.搭建环境:安装JRE.JDK.Ecl ...

  2. 2019强网杯web upload writeup及关键思路

    <?phpnamespace app\web\controller; class Profile{    public $checker;    public $filename_tmp;    ...

  3. 模板 - 数据结构 - 链表/LinkedList

    一个只供删除的双向链表,为了简单不再引入head节点,而且也不进行next的套娃操作.空间使用略微多了一些,但是无伤大雅. struct LinkedList { static const int M ...

  4. docker安装postgresql

    1.在linux执行以下代码: docker run -p : -v /home/docker/postgresql/data:/var/lib/postgresql/data -e POSTGRES ...

  5. leaflet地图框架

    leaflet 中文API LeafLet js 官网:http://leafletjs.com/index.html LeafLet js 官网demo: http://leafletjs.com/ ...

  6. html5的 embed元素 和 object元素

    html5的 embed元素 和 object元素 一.总结 一句话总结: embed定义嵌入的内容,比如插件,比如flash object定义定义一个嵌入的对象,用于包含对象,比如图像.音频.视频. ...

  7. 项目启动报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.wuhongyu.mapper.OrdersMapper.selectByExample

    在用maven配置mybatis环境时出现此BindingExceptiony异常,发现在classes文件下没有mapper配置文件,应该是maven项目没有扫描到mapper包下的xml文件, 在 ...

  8. Spring源码解析--IOC根容器Beanfactory详解

    BeanFactory和FactoryBean的联系和区别 BeanFactory是整个Spring容器的根容器,里面描述了在所有的子类或子接口当中对容器的处理原则和职责,包括生命周期的一些约定. F ...

  9. android studio 把 ionic 打包时修改应用名称、修改应用图标、修改启动画面,升级打包

    在项目中resources中替换成自己的图标和启动画面即可 在config.xml 修改包名 打正式包和升级打包同原生的类似,在Androidmanifest.xml修改版本号和版本名

  10. Linux下文件乱码问题

    通常编码会在windows环境下进行,当把windows下的代码拷贝到linux环境时,会出现 error: “build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录” 等等类似问 ...