【问题标题】:Convert json dict and list转换 json dict 和 list
【发布时间】:2021-12-29 17:15:18
【问题描述】:

我从 URL 中提取了 JSON 数据。结果是一本字典。如何将此字典转换为数据框,以便 AdrActCnt 和 AdrBal1in100KCnt 是列,时间是每个值的索引。

提前致谢

{"data":[
{"asset":"btc","time":"2009-01-04T00:00:00.00000000Z","AdrActCnt":"10","AdrBal1in100KCnt":"145"},
{"asset":"btc","time":"2009-01-05T00:00:00.00000000Z","AdrActCnt":"30","AdrBal1in100KCnt":"152"},
{"asset":"btc","time":"2009-01-06T00:00:00.00000000Z","AdrActCnt":"50","AdrBal1in100KCnt":"136"}
]}

time----------------------------------------AdrActCnt---------AdrBal1in100KCnt
    
2009-01-04T00:00:00.00000000Z------------------10-------------------145
2009-01-05T00:00:00.00000000Z------------------30-------------------152
2009-01-06T00:00:00.00000000Z------------------50-------------------136

【问题讨论】:

  • 您要转换JSON to pandas DataFrame吗?
  • 您只是想以格式化的方式打印数据吗?
  • 是的,我想在数据框中查看这些数据

标签: python json list dataframe dictionary


【解决方案1】:

我会试试这个:

我会确保我使用的是最新的 python 版本之一,因为可以更改字典中的排序或数据源结构,最好我会为此代码添加字典和列表的排序。


import pandas as pd

obj = {"data":[
{"asset":"btc","time":"2009-01-04T00:00:00.00000000Z","AdrActCnt":"10","AdrBal1in100KCnt":"145"},
{"asset":"btc","time":"2009-01-05T00:00:00.00000000Z","AdrActCnt":"30","AdrBal1in100KCnt":"152"},
{"asset":"btc","time":"2009-01-06T00:00:00.00000000Z","AdrActCnt":"50","AdrBal1in100KCnt":"136"}
]}


def value(obj, keys):
    for dicit in obj["data"]:
        values = [
            value
            for key, value in dicit.items()
            if key in keys
        ]
        yield values

keys = ["time", "AdrActCnt", "AdrBal1in100KCnt"]
df = pd.DataFrame(
    data=[x for x in value(obj, keys)]
    , columns=keys
)

print(df)

输出:

                            time AdrActCnt AdrBal1in100KCnt
0  2009-01-04T00:00:00.00000000Z        10              145
1  2009-01-05T00:00:00.00000000Z        30              152
2  2009-01-06T00:00:00.00000000Z        50              136

如果字典可以随机排序(不排序)或者我想确保它是排序的,那么我会尝试下面的示例:

### Another sort

keys = ["AdrBal1in100KCnt", "AdrActCnt", "time"]

def value(obj, keys):
    for dictis in obj["data"]:
        listed = [dictis[x] for x in keys]
        yield listed

df = pd.DataFrame(
    data=[x for x in value(obj, keys)]
    , columns=keys
)

print(df)

输出:

  AdrBal1in100KCnt AdrActCnt                           time
0              145        10  2009-01-04T00:00:00.00000000Z
1              152        30  2009-01-05T00:00:00.00000000Z
2              136        50  2009-01-06T00:00:00.00000000Z

【讨论】:

  • 就是这样!谢谢!!
  • 已添加,使用索引进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多