我有一个以这种格式设置的数据:
data = { 'sensor1': {'units': 'x', 'values': [{'time': 17:00, 'value': 10},
{'time': 17:10, 'value': 12},
{'time': 17:20, 'value' :7}, ...]}
'sensor2': {'units': 'x', 'values': [{'time': 17:00, 'value': 9},
{'time': 17:20, 'value': 11}, ...]}
}我想收集数据,放入csv,比如:
time, sensor1, sensor2
17:00, 10, 9,
17:10, 12, ,
17:20, 7, 11,
...我需要使用csv模块,所以我需要这样的字典列表:
{‘时间’:17:00,‘感觉1’:10,‘感觉2’:9},
我知道
fields = list(data.keys())将进入csv写入作为标题。这只是我不能正确格式化的行。尤其是由于时间并不总是存在于这两个传感器中。例如,17:10在传感器1中有一个值,但在传感器2中不存在。
发布于 2022-11-24 19:38:25
您可以使用pandas从数据创建数据,并将其保存为CSV:
import pandas as pd
data = {
"sensor1": {
"units": "x",
"values": [
{"time": "17:00", "value": "10"},
{"time": "17:10", "value": "12"},
{"time": "17:20", "value": "7"},
],
},
"sensor2": {
"units": "x",
"values": [
{"time": "17:00", "value": "9"},
{"time": "17:20", "value": "11"},
],
},
}
df = pd.DataFrame(
[
{"time": vv["time"], "column": k, "value": vv["value"]}
for k, v in data.items()
for vv in v["values"]
],
)
df = df.pivot(index="time", columns="column", values="value").reset_index()
df.to_csv("data.csv", index=False)保存data.csv
time,sensor1,sensor2
17:00,10,9
17:10,12,
17:20,7,11发布于 2022-11-24 21:18:02
你可以分两步完成。
data = { 'sensor1': {'units': 'x', 'values': [{'time': '17:00', 'value': 10},
{'time': '17:10', 'value': 12},
{'time': '17:20', 'value' :7},
]},
'sensor2': {'units': 'x', 'values': [{'time': '17:00', 'value': 9},
{'time': '17:20', 'value': 11},
]},
}
# first step: dictionary keyed by time {time:t,{'sensorx':v,}}
dic = {}
for sensor in data:
for sample in data[sensor]['values']:
if not dic.get( sample['time']):
dic[ sample['time']] = {} # create the record
dic[ sample[ 'time']][sensor] = sample['value']
# second step: generate CSV
columns=['time', 'sensor1', 'sensor2']
import csv
f = open( 'zz.csv', 'w', newline='')
writer = csv.DictWriter( f, columns)
writer.writeheader()
for key in dic:
writer.writerow( dict( [('time',key)] + list( dic[key].items())))其结果将是:
time,sensor1,sensor2
17:00,10,9
17:10,12,
17:20,7,11https://stackoverflow.com/questions/74564045
复制相似问题