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

我期望如下所示:

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


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

但是没有运气:/

最佳答案

我不知道这是否是最好的方法。我真的很感谢您引起我的注意。

>>> 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'  |
+-------+------+


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

关于python - petl-如何用零替换空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43723225/

10-10 21:52