【问题标题】:How to print index (Row number) while conversion error during json.loads Panda Dataframe如何在 json.loads Panda Dataframe 期间转换错误时打印索引(行号)
【发布时间】:2022-01-22 12:38:18
【问题描述】:

我正在使用下面的 Json 加载代码,它适用于有效的 json 字符串,但对于无效的它会引发错误。

orgdf['data'].apply(json.loads)

我只需要知道 Jason.loads 给出错误的无效记录是哪个索引(行号)。

我知道我可以使用数据帧枚举(for 循环)来做到这一点,但正在寻找一种有效的方法来做到这一点,因为它包含百万条记录。

如果有人能在这方面提供帮助,那就太好了。

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案1】:

    您可以创建一个自定义函数,将 json.loads 调用包装在 try/except 中,然后在 apply 中调用此函数。另见this answer

    def is_valid_json(s):
        try:
            json.loads(s)
        except (json.JSONDecodeError, ValueError):
            return False
        return True
    
    # Mark valid JSON strings
    valid = orgdf['data'].apply(is_valid_json)
    
    # Extract indices with _invalid_ strings
    invalid_indices = valid[~valid].index
    

    【讨论】:

    • 感谢它的工作正常 :) 但是不确定它是否以相同的时空复杂性结束。
    • 你是对的,复杂性可能相似。 json.loads 不容易矢量化,你可以阅读更多here
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2016-07-29
    • 2019-05-17
    • 2020-10-18
    • 2014-10-16
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多