如何将petl值替换为空值

2024-05-01 04:47:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我预计会有如下情况:

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

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

但运气不佳:/


Tags: csv函数iohttpdatareadthedocs情况etl
2条回答

我不知道这是不是最好的办法。我真的很感谢你让我注意到{}的存在。在

>>> 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;但是lambdas不能包含if语句。为此,我为lambda创建了要调用的函数f。我认为这些列是重新排序的,因为容器是一个OrderedDict,并且它是按列名称按字典顺序排序的。也许它不一定是OrderedDict,但这是我在doc中发现的。在

我给帮助小组发了邮件python-etl@googlegroups.com造物主自己用一个完美的功能来回应:

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

相关问题 更多 >