python - 将字典列表写入 Pandas Dataframe 中的同一行

标签 python pandas dictionary

我有以下字典列表,我尝试将其创建到数据框中,我已设法将所有“标题”值放入 df 中,但我无法弄清楚如何获取“值”,我正在尝试麻烦标题和值在同一行。

new_inner = [{'Header': {'TimeserieId': '108', 'ObjectID': 'SummeSLPVerbrauchDayAhead', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts day ahead', 'LastUpdate': '2017-12-30T11:15:00.000Z'}, 'Values': {'Value': {'FromUTC': '2017-12-31T05:00:00.000Z', 'UntilUTC': '2018-01-01T05:00:00.000Z', 'TSO-Value': '100947866.161'}}}, {'Header': {'TimeserieId': '109', 'ObjectID': 'SummeSLPVerbrauchIntraDay', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts intraday', 'LastUpdate': '2017-12-31T23:15:00.000Z'}, 'Values': {'Value': {'FromUTC': '2017-12-31T05:00:00.000Z', 'UntilUTC': '2018-01-01T05:00:00.000Z', 'TSO-Value': '100359943.649'}}}, {'Header': {'TimeserieId': '2156', 'ObjectID': 'SummeSLPVerbrauchTirolIntraDay', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts intraday Tyrol', 'LastUpdate': '2019-12-30T15:44:14.267Z'}, 'Values': None}, {'Header': {'TimeserieId': '2157', 'ObjectID': 'SummeSLPVerbrauchTirolDayAhead', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts day ahead Tyrol', 'LastUpdate': '2019-12-30T15:44:14.269Z'}, 'Values': None}, {'Header': {'TimeserieId': '2158', 'ObjectID': 'SummeSLPVerbrauchVorarlbergIntraDay', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts intraday VBG', 'LastUpdate': '2019-12-30T15:44:14.273Z'}, 'Values': None}, {'Header': {'TimeserieId': '2159', 'ObjectID': 'SummeSLPVerbrauchVorarlbergDayAhead', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts day ahead VBG', 'LastUpdate': '2019-12-30T15:44:14.294Z'}, 'Values': None}]

当前代码:

df3 = pd.DataFrame([i['Header'] for i in new_inner])

但是如果我尝试这样做:

df3 = pd.DataFrame([i['Values'] for i in new_inner])

我收到以下错误

'NoneType' object has no attribute 'keys'

我的两个问题是为什么它找不到值字典以及如何将标题和值字典放入数据框中的同一行?

我正在寻找如下所示的输出: DataFrame Output

最佳答案

我建议先准备数据,然后转换为Dataframe

  • 每个 dict压平按键Header + Values到单个字典
  • key Values检查是否是 None返回默认的字典值,或内部键 Value
values = [{'Header': {...}}] # initial data

def getValueOrDefault(v):
    if v is None:
        return {'FromUTC': None, 'UntilUTC': None, 'TSO-Value': None}
    return v['Value']

values = [{**value['Header'], **getValueOrDefault(value['Values'])} for value in values]
# values is now [{'TimeserieId': '108', ...}, {}, {}, ...]

df3 = pd.DataFrame(values)
print(df3)
<小时/>

数据准备详细信息:第一个值的示例

  • {**first['Header']}平展 Header 中的所有键/值值,删除此级别的数据

  • {**value['Header'], **value['Values']}放置键 Header 中的所有键/值和 key Values在一起但是因为你有一些None您可以申请验证,

    • 如果 None获取带有好键的默认字典
    • 如果没有None检索 khe 内部 Value关键
first = values[0]
print(first) # {'Header': {'TimeserieId': '108', 'ObjectID': 'SummeSLPVerbrauchDayAhead', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts day ahead', 'LastUpdate': '2017-12-30T11:15:00.000Z'}, 'Values': {'Value': {'FromUTC': '2017-12-31T05:00:00.000Z', 'UntilUTC': '2018-01-01T05:00:00.000Z', 'TSO-Value': '100947866.161'}}}
print({**first['Header']}) # {'TimeserieId': '108', 'ObjectID': 'SummeSLPVerbrauchDayAhead', 'Unit': 'kWh', 'Granularity': 'DAY', 'Name': 'SLP consumption forecasts day ahead', 'LastUpdate': '2017-12-30T11:15:00.000Z'}
print({**first['Values']}) # {'Value': {'FromUTC': '2017-12-31T05:00:00.000Z', 'UntilUTC': '2018-01-01T05:00:00.000Z', 'TSO-Value': '100947866.161'}}
print({**getValueOrDefault(first['Values'])}) # {'FromUTC': '2017-12-31T05:00:00.000Z', 'UntilUTC': '2018-01-01T05:00:00.000Z', 'TSO-Value': '100947866.161'}

关于python - 将字典列表写入 Pandas Dataframe 中的同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533741/

相关文章:

python - 在自定义损失函数中 reshape 张量

python - 获取多索引中级别的最后一个元素

python - 分层索引设置行为存在问题

python - 让 geodjango 查询返回距离作为属性?

python - 如何在 Airflow 上重新启动失败的任务

python - 按月份名称对 Pandas 数据框系列进行排序

python - 如何更新 python 列表中的值?

Python .get 从嵌套字典中获取

c# - 来自字典 C# 的数组

python - PyParsing:使用反斜杠的 shell 样式空格转义