【问题标题】:convert a embedded json string into pandas dataframe将嵌入的 json 字符串转换为 pandas 数据帧
【发布时间】:2017-12-19 05:07:12
【问题描述】:

我有以下数据:

json_str = "[{“key1”: “value1”, “key2”= “value2”, 
“key3”: “{“key_a”: “value_a1”, “key_b”: “value_b1”, “key_c”: “value_c1”}”,“key4”: 4},
{“key1”: “value5”, “key2”= “value6”, 
“key3”: “{“key_a”: “value_a2”, “key_b”: “value_b2”, “key_c”: “value_c2”}”,“key4”: 8}]"

我想将其转换为 pandas DataFrame。 我试过这个:

#code1
data = pd.read_json(json_str)
print(data)

#code2
data = pd.read_json(json_str, typ ='series')
print(data)

#code3
data = pd.DataFrame.from_dict([json_str], orient='columns', dtype= None)
print(data)

#same output
ValueError: Unexpected character found when decoding object value

再次:

data = json.loads(json_str)
print(data)
enter code here
error : json.decoder.JSONDecodeError: Expecting ',' delimiter

我无法使用 .replace(),因为我需要一个包含 JSON 值的列名“key3” 例如:{“key_a”:“value_a1”,“key_b”:“value_b1”,“key_c”:“value_c1”}

【问题讨论】:

  • 您的数据不统一。你有这样的key:,还有key=
  • 感谢您指出。现在,它已被编辑。
  • 你还有热“key2”= “value2”
  • 魔术引号也可能不太好。
  • 不,这是统一的。我认为。 key1.....key4 都是一样的,但是值不同

标签: python json pandas


【解决方案1】:

需要清理数据,这是一种方法

from functools import reduce
import ast

di = {'“':"'", '”':"'", "'{":'{', "}'":"}", "=":':' }

new = reduce(lambda x, y: x.replace(y, di[y]), di, json)

df = pd.io.json.json_normalize(ast.literal_eval(new))

print(df)

     key1    key2 key3.key_a key3.key_b key3.key_c  key4
0  value1  value2   value_a1   value_b1   value_c1     4
1  value5  value6   value_a2   value_b2   value_c2     8

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2014-06-07
    • 2023-03-31
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2020-11-05
    相关资源
    最近更新 更多