首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用petl转换表中的值

如何使用petl转换表中的值
EN

Stack Overflow用户
提问于 2017-11-02 19:52:50
回答 1查看 489关注 0票数 1

在表中转换多个值时,我遇到了一个奇怪的问题。

我有一个数据的table,如下所示:

代码语言:javascript
复制
+-------------+--------------+-------------+
| id          | name         | category_id |
+=============+==============+=============+
|         1   |       Horse  | 5           |
+-------------+--------------+-------------+
|         2   |        Cow   | 5           |
+-------------+--------------+-------------+
|         3   |        Pig   | 2           |
+-------------+--------------+-------------+
|         4   |     Chicken  | 3           |
+-------------+--------------+-------------+

然后我发现category_id是这样的:

代码语言:javascript
复制
# find the item category id
items_cat_id = etl.values(table, 'category_id')

然后像这样循环数据,以便将上面的category_id转换为目标类别id:

代码语言:javascript
复制
    for item in items_cat_id:
        """ 
        fetch target mongo collection. 
        source_name is the category name to look up in the target, 
        if we get a match convert the table category_id value to 
        the mongo id.
        """
        target_category_id = target_db.collection.find_one({ 'name': source_name })

        converted_table = etl.convert(table, 'category_id', 
            lambda _: target_category_id.get('_id'), 
            where=lambda x: x.category_id == item)

我似乎只得到了这个:

代码语言:javascript
复制
+-------------+--------------+-----------------------------+
| id          | name         | category_id                 |
+=============+==============+=============================+  
|         1   |       Horse  | 5                           |
+-------------+--------------+-----------------------------+
|         2   |        Cow   | 5                           |
+-------------+--------------+-----------------------------+
|         3   |        Pig   | 2                           |
+-------------+--------------+-----------------------------+
|         4   |     Chicken  | QnicP3f4njL54HRqu           |
+-------------+--------------+-----------------------------+

当它应该是

代码语言:javascript
复制
+-------------+--------------+-----------------------------+
| id          | name         | category_id                 |
+=============+==============+=============================+
|         1   |       Horse  | 5                           |
+-------------+--------------+-----------------------------+
|         2   |        Cow   | 5                           |
+-------------+--------------+-----------------------------+
|         3   |        Pig   | yrDku5Yqkc2MKZZkD           |
+-------------+--------------+-----------------------------+
|         4   |     Chicken  | QnicP3f4njL54HRqu           |
+-------------+--------------+-----------------------------+

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 20:55:22

etl.convert()items_cat_id上创建一个新表,每次迭代都来自同一个未更改的源table。因此,在每个结果中只更改一行。修改代码如下:

代码语言:javascript
复制
for x in y:
   table = etl.convert(table, ...)

现在你总是在处理最后的结果。

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

https://stackoverflow.com/questions/47083575

复制
相关文章

相似问题

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