例子:

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. Java 日期工具类(日期,月份加减等)--转

    package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.C ...

  2. 洛谷P1052过河

    题目 不看数据范围的话是一个很简单的DP,可是加上数据范围之后就之前的做法就不行了. 所以我们考虑一下路径压缩. 小数据Code #include <iostream> #include ...

  3. 命令备忘 ss

    简介: Socket Statistics(ss)命令类似于netstat,它用于显示各种有用的网络套接字信息. 长时间看,已经注意到netstat这个命令程序已经过时了.从而代替netstat的是s ...

  4. word 插入表格,位置不在最左边

    首先想到的是 样式的问题.

  5. Java与设计模式之单例模式(上)六种实现方式

           阎宏博士在<JAVA与模式>中是这样描述单例模式的:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类.      ...

  6. Java 合并PDF文件

    处理PDF文档时,我们可以通过合并的方式,来任意合并几个不同的PDF文件,使我们方便的存储和管理文档.例如,在做毕业设计的时候,封面和论文正文往往是两个PDF文档,但是,上交电子档的时候,需要合二为一 ...

  7. 常用spaceclaim脚本(三)

    拉伸曲线 ptList=List[Point]() #定义一个点的列表 ptList.Add(Point.Create(MM(11),MM(-14),MM(0))) #创建点,并放入列表当中 ptLi ...

  8. Kafka(二) —— Server端设计原理

    整理架构 kafka confluence kafka官方文档中文翻译-设计 消息设计 /** * 消息类 * * @author Michael Fang * @since 2019-11-14 * ...

  9. 配置Windows实例NTP服务

    本文介绍如何开启和配置Windows NTP服务,保证实例本地时间精确同步. Windows实例NTP服务介绍 目前,所有地域下ECS实例默认采用CST(China Standard Time)时区, ...

  10. 两个Double类型相减出现精度丢失问题

    两个Double类型相减出现精度丢失问题 720.50-279.5=440.099999999 而不是440.1 解决方法,将数据库中的类型改为decimal类型,小数精确到2位