【问题标题】:petl - how to replace empty values with zerospetl - 如何用零替换空值
【发布时间】:2017-05-01 17:10:58
【问题描述】:

对于 petl 表,如何用零替换空值?

我希望得到以下内容:

tb_probii = etl.fromcsv("data.csv").fill("score", "", 0)

在这里寻找类似的功能: http://petl.readthedocs.io/en/latest/_modules/petl/transform/fills.html

但没有运气:/

【问题讨论】:

    标签: python etl petl


    【解决方案1】:

    我不知道这是否是最好的方法。我真的很感谢你让我注意到petl 的存在。

    >>> import petl
    >>> tb_probii = petl.fromcsv('trial.csv')
    >>> tb_probii
    +------+-------+
    | team | score |
    +======+=======+
    | 'A'  | ''    |
    +------+-------+
    | 'B'  | '25'  |
    +------+-------+
    | 'C'  | '35'  |
    +------+-------+
    
    >>> from collections import OrderedDict
    >>> mappings = OrderedDict()
    >>> def f(s):
    ...     if s == '':
    ...         return '0'
    ...     else:
    ...         return s
    ...     
    >>> mappings['team'] = 'team'
    >>> mappings['score'] = 'score', lambda s: f(s)
    >>> tb_probii = petl.fieldmap(tb_probii, mappings)
    >>> tb_probii 
    +-------+------+
    | score | team |
    +=======+======+
    | '0'   | 'A'  |
    +-------+------+
    | '25'  | 'B'  |
    +-------+------+
    | '35'  | 'C'  |
    +-------+------+
    

    一些解释: fieldmap 执行包含在 OrderedDict 中的映射集合。当我尝试这个时,我做了映射到一个新表。这就是为什么team 与自身映射相同的原因。如果您保留同一张桌子,这可能是不必要的,尽管我对此表示怀疑。每个映射都是一个元组。 score 表示score 将通过转换映射到自身。似乎有必要使用lambda;但是,lambda 不能包含 if 语句。出于这个原因,我创建了函数 f 供 lambda 调用。我认为这些列是重新排序的,因为容器是 OrderedDict 并且它是按列名按字典顺序排序的。也许它不必是OrderedDict,但这是我在文档中找到的。

    【讨论】:

    • 感谢您的回答!我很高兴能和你分享petl!我正在寻找好的数据整理工具。也考虑尝试 Blaze。如果您有任何其他建议,我很想听听。
    【解决方案2】:

    我向帮助组 python-etl@googlegroups.com 发送了电子邮件,创建者本人回复了一个完美运行的功能:

    tb_probii = etl.fromcsv("data.csv").replace("score", "", 0)
    

    【讨论】:

    • 我想问你是否找到了更好的方法。非常愉快的学习经历。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2018-01-05
    • 2014-04-09
    • 2017-11-06
    相关资源
    最近更新 更多