【问题标题】:How do I lowercase a JSON object on pandas dataframe如何小写熊猫数据框上的 JSON 对象
【发布时间】:2019-01-13 07:34:51
【问题描述】:

这是我的数据:

Id   var_map
1    {'email_count': 3.0, 'outgoing': 90.0}
2    {'Email_Count': 5.0, 'outgoing': 91.0}

我做的是

df['var_map'] = score_data['var_map'].str.lower()

结果与我预期的不同,错误是这样的

Id   var_map
1    NaN
2    NaN

我想怎么解决这个问题

【问题讨论】:

    标签: python json pandas lowercase


    【解决方案1】:

    这是使用apply 的一种方法。

    例如:

    import pandas as pd
    df = pd.DataFrame({"var_map": [{'email_count': 3.0, 'outgoing': 90.0}, {'Email_Count': 5.0, 'outgoing': 91.0}]})
    df["var_map"] = df["var_map"].apply(lambda x: {k.lower(): v for k,v in x.items()})
    print(df)
    

    输出:

                                        var_map
    0  {u'outgoing': 90.0, u'email_count': 3.0}
    1  {u'outgoing': 91.0, u'email_count': 5.0}
    

    【讨论】:

    • 按预期工作
    • 好的,最后,我选择这个作为最佳答案,因为它保持 JSON 格式,并且代码符合我的用例
    【解决方案2】:
    def var_map_lower(var_map):
        return {x.lower(): y for (x,y) in var_map.items()}
    
    df['var_map'] = df['var_map'].apply(var_map_lower)
    

    你可以试试这个吗?

    【讨论】:

    • 对不起,几乎一样,但 Rakesh 的答案更好
    • 会尝试,粗鲁的答案按预期工作,如果这个工作会投票
    • 不工作,错误信息AttributeError: 'float' object has no attribute 'lower'
    • return {x.lower(): y for (x,y) in var_map.items()}
    • 我修正了我的答案,现在应该可以了,抱歉,谢谢 Rakesh
    【解决方案3】:

    您是否尝试过将数据列转换为字符串?

    import pandas as pd
    
    
    
    data['var'] = data['var_map'].astype(str).str.lower()
    print data
    

    【讨论】:

    • 这个方法我还没想,我的不好,会试试的
    • 对不起,我的错,我从最佳答案中删除了这个,因为它没有保持 JSON 格式
    • @NabihBawazir 啊我的错。不知道你必须保留dtype
    猜你喜欢
    • 2021-07-17
    • 2019-01-01
    • 2019-12-07
    • 2016-12-25
    • 2018-08-20
    • 2020-04-30
    • 2018-04-27
    • 2013-11-12
    • 2014-02-01
    相关资源
    最近更新 更多