精选文章 在使用pandas 0.23.4对日期进行分组排序时报错

在使用pandas 0.23.4对日期进行分组排序时报错

作者:ai_1046067944 时间: 2019-11-06 08:29:51
ai_1046067944 2019-11-06 08:29:51
 date_df["rank_num"] = date_df.groupby("issuer_id").report_date.agg("rank", **{"ascending": 1, "method": "min"})
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 3479, in aggregate
    return getattr(self, func_or_funcs)(*args, **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 1906, in rank
    na_option=na_option, pct=pct, axis=axis)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 1025, in _cython_transform
    **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2630, in transform
    return self._cython_operation('transform', values, how, axis, **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2590, in _cython_operation
    **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2664, in _transform
    transform_func(result, values, comp_ids, is_datetimelike, **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2479, in wrapper
    return f(afunc, *args, **kwargs)
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2430, in 
    kwargs.get('na_option', 'keep')
TypeError: 'NoneType' object is not callable

在使用pandas对一列日期进行分组排序时报错,

1. 根据错误提示 File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2430, in kwargs.get('na_option', 'keep') 可知,是因为pandas模块的groupby.py文件的下面代码中func函数传入为None导致的。

'f': lambda func, a, b, c, d, **kwargs: func(
    a, b, c, d,
    kwargs.get('ties_method', 'average'),
    kwargs.get('ascending', True),
    kwargs.get('pct', False),
    kwargs.get('na_option', 'keep')
)

2. 根据错误提示
  File "D:\python_virtualenv\es_env\lib\site-packages\pandas\core\groupby\groupby.py", line 2478, in wrapper return f(afunc, *args, **kwargs)
  可知afunc就是传入的函数,这个afunc是使用get_func函数一步步获取的,最终是看_libs\groupby.py文件下是否存在一个group_rank_object函数,但是文件中没有,所以获得的是None。

def _get_cython_function(self, kind, how, values, is_numeric):
# 这一步查看values中的数据类型,date无法识别,datetime识别为int
    dtype_str = values.dtype.name
    def get_func(fname):
        # see if there is a fused-type version of function
        # only valid for numeric
# 这一步看libgroupby中是不是有fname对应的函数
        f = getattr(libgroupby, fname, None)
        if f is not None and is_numeric:
            return f

        # otherwise find dtype-specific version, falling back to object
# 再看是不是有group_rank_object函数,因为没有,所以最后返回的结果是None
        for dt in [dtype_str, 'object']:
            f = getattr(libgroupby, "%s_%s" % (fname, dtype_str), None)
            if f is not None:
                return f

    ftype = self._cython_functions[kind][how]

    if isinstance(ftype, dict):
# 这一步获取传入的函数afunc
        func = afunc = get_func(ftype['name'])
        # a sub-function
        f = ftype.get('f')
        if f is not None:

            def wrapper(*args, **kwargs):
                return f(afunc, *args, **kwargs)

            # need to curry our sub-function
            func = wrapper

3.结论
  (1).0.23.4的pandas没有对object的排序方式,只存在针对int和float的排序方式。
  (2).0.23.4的pandas无法识别date类型,是作为object类型。但是可以识别datetime类型,会把datetime类型识别为int来处理。
  (3).所以要对日期列进行排序,需要先转换成时间才行。

0.23版本的pandas存在这个问题,但是0.22版本没有这个问题。

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Android 遇坑【5】 - bindService 未触发onServiceConnected回调

下一篇:服务器架构设计进化之路

您可能感兴趣

  • 如何基于 Electron 开发跨终端的应用

    自我介绍 欢迎大家来到今天的早早聊跨端跨栈专场,今天我分享的主题是《如何基于 Electron 开发跨终端的应用》。先做一下自我介绍,我叫逯子洋,17 年加入政采云,目前主要负责政采云前端工程化平台敦煌以及政采云电子招投标客户端的建设。这边是我们团队的微信公众号,大家如果想对我们团队有更多的了解,可以关注一下我们的公众号。 首先我们分享的第一块叫端的延展。不知道大家对这张图熟不熟悉,前段时间...

  • 在Windows Server 2016和SQL Server Always On可用性组上安装SQL Server 2019

    In this article, we will proceed with configuring a SQL Server Always On Availability Groups and perform failover validations. 在本文中,我们将继续配置SQL Server Always On可用性组并执行故障转移验证。 You should go through t...

  • 安装SQL Server 2016

    介绍 (Introduction) Microsoft SQL Server 2016 provides faster transactions and queries, deeper insights on any device, advanced analytics, new security technology, and new hybrid cloud scenarios. Alo...

  • mysql 查询最顶级_2018顶级MySQL博客作者

    mysql 查询最顶级 We made a collection of the most popular MySQL bloggers, including a link to each individual blog. The ranking is based on Alexa global score as of April 25, 2019. 我们收集了一些最受欢迎MySQL博客,包括...

  • JAVA面试(全)

    Java 八大基本数据类型 八大基本类型 Byte,short,long,int,double,float,boolean,char 占用大小及其长度 数据类型 空间(字节B) 取值范围 byte 1 -2^7 ~ 2^7-1 short 2 -2^15~ 2^15-1 char 2 0 ~ 2^16-1 char无需符号位 int 4 -2^31 ~ 2^31-1 float 4 -2^3...

  • 《重新定义公司》读书笔记

    激励偏向的是事成之后的利益分享,而赋能强调的,是激起创意人的兴趣与动力,给予挑战。唯有发自内心的志趣,才能激发持续的创造,命令则不适用于他们。因此,组织的职能不再是分派任务和监工,而更多的是让员工的专长、兴趣和客户的问题有更好的匹配,这往往要求更多的员工自主性、更高的流动性和更灵活的组织。我们甚至可以说,是员工使用了组织的公共服务,而不是公司雇用了员工。两者的根本关系发生了颠倒。 年少时,第...

  • 江苏谋定特色小镇-农业大健康·万祥军:旅游理念经营产业

    江苏谋定特色小镇-农业大健康·万祥军:旅游理念经营产业 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万赢信采编 :“希望各地会后抓紧时间对培育建设对象进行梳理,根据标准推荐重点对象,有计划、有步骤地组织实施,努力打造富有鲜明个性、成效显著的特色旅游小镇。”特色旅游小镇培育工作座谈会江苏省旅游局局领导詹庚庆表示,江苏省计划通过“十三五”的努力,加...

  • Pivotal Greenplum® 6.9-管理员指南-管理系统-使用gpbackup和gprestore的并行备份

    使用gpbackup和gprestore的并行备份 gpbackup 和 gprestore是Greenplum数据库工具,用于创建和恢复Greenplum数据库的备份集。默认情况下,gpbackup仅将对象元数据文件和DDL文件,存储在Greenplum数据库Master的数据目录中以进行备份。Greenplum数据库Segment使用 COPY ...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。