我有以下字典列表,我尝试将其创建到数据框中,我已设法将所有“标题”值放入 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
中的所有键/值和 keyValues
在一起但是因为你有一些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/