petl - 如何用零替换空值
petl - how to replace empty values with zeros
对于 petl table,如何用零替换空值?
我希望是这样的:
tb_probii = etl.fromcsv("data.csv").fill("score", "", 0)
在这里寻找类似的功能:
http://petl.readthedocs.io/en/latest/_modules/petl/transform/fills.html
但运气不好:/
我不知道这是不是最好的方法。我真的很感谢你让我注意到 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
中包含的映射集合。当我尝试这个时,我将映射到一个新的 table。这就是 team
被完全映射到自身的原因。如果您保持相同的 table,这可能是不必要的,尽管我对此表示怀疑。每个映射都是一个元组。 score
表示 score
将通过转换映射到自身。似乎有必要使用 lambda
;但是,lambda 不能包含 if
语句。出于这个原因,我创建了函数 f
供 lambda 调用。我认为列是重新排序的,因为容器是 OrderedDict
并且它是按列名的字典顺序排序的。也许它不一定是 OrderedDict
但这是我在文档中找到的。
我给帮助组 python-etl@googlegroups.com 发了邮件,创建者本人回复了一个完美运行的功能:
tb_probii = etl.fromcsv("data.csv").replace("score", "", 0)
对于 petl table,如何用零替换空值?
我希望是这样的:
tb_probii = etl.fromcsv("data.csv").fill("score", "", 0)
在这里寻找类似的功能: http://petl.readthedocs.io/en/latest/_modules/petl/transform/fills.html
但运气不好:/
我不知道这是不是最好的方法。我真的很感谢你让我注意到 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
中包含的映射集合。当我尝试这个时,我将映射到一个新的 table。这就是 team
被完全映射到自身的原因。如果您保持相同的 table,这可能是不必要的,尽管我对此表示怀疑。每个映射都是一个元组。 score
表示 score
将通过转换映射到自身。似乎有必要使用 lambda
;但是,lambda 不能包含 if
语句。出于这个原因,我创建了函数 f
供 lambda 调用。我认为列是重新排序的,因为容器是 OrderedDict
并且它是按列名的字典顺序排序的。也许它不一定是 OrderedDict
但这是我在文档中找到的。
我给帮助组 python-etl@googlegroups.com 发了邮件,创建者本人回复了一个完美运行的功能:
tb_probii = etl.fromcsv("data.csv").replace("score", "", 0)