首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python使用petl对多个字段进行分组

使用python使用petl对多个字段进行分组
EN

Stack Overflow用户
提问于 2020-07-25 20:17:31
回答 1查看 148关注 0票数 1

我正在尝试按多个字段对已经使用petl读取的表进行分组(即,它是一个petl类型)。我正在尝试使用以下代码:

代码语言:javascript
复制
import petl as etl
from collections import OrderedDict

csv_ea_flood_def = r'............'   #Path to csv table
ea_flood_def = etl.fromcsv(csv_ea_flood_def)

aggreg = OrderedDict()
aggreg['count'] = len
aggreg['sum_length'] = 'length', sum
EA_Defence_Types = etl.aggregate(ea_flood_def, key=('prot_type', 'asset_type', 'description'), aggregation=aggreg)

这段代码不会抛出任何错误。但是,结果表似乎在某种程度上是空的或损坏的:

print(EA_Defence_Types)将抛出:

代码语言:javascript
复制
('prot_type', 'asset_type', 'description', 'count', 'sum_length')  #which is fine

print(EA_Defence_Types1)将抛出:

代码语言:javascript
复制
Traceback (most recent call last):
  File "def_failure_prob.py", line 514, in <module>
    main()
  File "def_failure_prob.py", line 504, in main
    def_fail_prob(con, cursor)
  File "def_failure_prob.py", line 111, in def_fail_prob
    print(EA_Defence_Types[1])
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\util\base.py", line 172, in __getitem__
    return super(Table, self).__getitem__(item)
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\util\base.py", line 33, in __getitem__
    return next(islice(self, item, item+1))
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\transform\reductions.py", line 308, in itermultiaggregate
    for k, rows in rowgroupby(it, key):
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\util\base.py", line 715, in <genexpr>
    return ((k.inner, vals) for (k, vals) in git)
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\util\base.py", line 699, in <genexpr>
    it = (Record(row, flds) for row in it)
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\transform\sorts.py", line 354, in _iternocache
    for row in _mergesorted(getkey, reverse, *chunkiters):
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\transform\sorts.py", line 164, in _heapqmergesorted
    for element in heapq.merge(*keyed_iterables):
  File "C:\ProgramData\Anaconda3\envs\env1\lib\heapq.py", line 350, in merge
    h_append([next(), order * direction, next])
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\transform\sorts.py", line 162, in <genexpr>
    keyed_iterables = [(_Keyed(key(obj), obj) for obj in iterable)
  File "C:\ProgramData\Anaconda3\envs\env1\lib\site-packages\petl\transform\sorts.py", line 124, in _iterchunk
    yield pickle.load(f)
TypeError: __new__() missing 1 required positional argument: 'flds'

我不知道这个错误意味着什么。

EN

回答 1

Stack Overflow用户

发布于 2020-07-25 20:37:40

我找到问题了。我用来计算'sum‘的字段不是数值型的(我只需要将字符串转换为浮点型)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63088212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档