簡體   English   中英

熊貓:JSONDecodeError:期望值:第 1 行第 1 列(字符 0)

[英]Pandas: JSONDecodeError: Expecting value: line 1 column 1 (char 0)

輸入是,

 df = pd.DataFrame([[1,'NaN','abj','1/1/2021'],
               [2,'[{"Result":"00018"},{"Result":"00065"}]','abj','1/1/2021'],
               [3,'','abj','1/1/2021']],
                 columns = ['ID','SKU','NOTES','Date'])

預期結果

        ID     SKU   NOTES
     0  1             abj
     1  2    00018    abj
     2  2    00065    abj
     3  3             abj 

嘗試了以下,但給出了錯誤

df.SKU = df.SKU.apply(lambda x : [ i['Result']  for i in  json.loads(x)])

df.explode('SKU')

結果錯誤: JSONDecodeError: Expecting value: line 1 column 1 (char 0)

您應該檢查x並跳過json

更長的版本,但更具可讀性

def convert(text):
    if text not in ('', 'NaN'):
        data = [i['Result'] for i in json.loads(text)]
    else:
        data = ''
    return data

df.SKU = df.SKU.apply(convert)

較短的版本:

df.SKU = df.SKU.apply(lambda x : [i['Result'] for i in json.loads(x)] if x not in ('', 'NaN') else "")

編輯:

更通用的版本 - 它使用try/except所以它應該與其他錯誤的字符串一起使用

def convert(text):
    try:   
        data = [i['Result'] for i in json.loads(text)]
    except Exception as ex:
        print(f'exeption: "{text}" : {ex}')
        data = ''
    return data

df.SKU = df.SKU.apply(convert)

完整的工作示例:

import pandas as pd
import json

df = pd.DataFrame([
        [1,'NaN','abj','1/1/2021'],
        [2,'[{"Result":"00018"},{"Result":"00065"}]','abj','1/1/2021'],
        [3,'','abj','1/1/2021']
     ], columns=['ID','SKU','NOTES','Date'])

print(df)

def convert(text):
    try:   
        data = [i['Result'] for i in json.loads(text)]
    except Exception as ex:
        print(f'exeption: "{text}" : {ex}')
        data = ''
    return data

df.SKU = df.SKU.apply(convert)
#df.SKU = df.SKU.apply(lambda x : [i['Result'] for i in json.loads(x)] if x not in ('', 'NaN') else "")

df = df.explode('SKU')

print(df)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM