我有以下字典列表
data=[
{'Time': 18057610.0, 'String_8': -1.4209e-15},
{'Time': 18057610.0, 'String_9': 2.7353e-16},
{'Time': 18057610.0, 'String_10': 1.1935e-15},
{'Time': 18057610.0, 'String_11': 1.1624},
{'Time': 18057610.0, 'String_12': -6.1692e-15},
{'Time': 18057610.0, 'String_13': 3.2218e-15},
{'Time': 18057620.4, 'String_8': 2.4377e-16},
{'Time': 18057620.4, 'String_9': -6.2809e-15},
{'Time': 18057620.4, 'String_10': 1.6456e-15},
{'Time': 18057620.4, 'String_11': 1.1651},
{'Time': 18057620.4, 'String_12': 1.7147e-15},
{'Time': 18057620.4, 'String_13': 9.8872e-16},
{'Time': 18057631.1, 'String_8': 4.1124e-15},
{'Time': 18057631.1, 'String_9': 1.5598e-15},
{'Time': 18057631.1, 'String_10': -2.325e-16},
{'Time': 18057631.1, 'String_11': 1.1638},
{'Time': 18057631.1, 'String_12': -3.9983e-15},
{'Time': 18057631.1, 'String_13': 4.459e-16}]
从这个我想得到下面的数据帧
df=
String 8 String 9 ... String 12 String 13
Time ...
1.80576100e+07 -1.4209e-15 2.7353e-16 ... -6.1692e-15 3.2218e-15
1.80576204e+07 2.4377e-16 -6.2809e-15 ... 1.7147e-15 9.8872e-16
1.80576311e+07 4.1124e-15 1.5598e-15 ... -3.9983e-15 4.4590e-16
下面是我尝试过的代码,但它需要"时间"键的所有值,因此我不能使用pd.DataFrame(dd)
dd = defaultdict(list)
for d in data:
for k, v in d.items():
dd[k].append(v)
我也尝试了a=dict(ChainMap(*data))
没有运气。谢谢。
一个选项是使用dict.setdefault
来更新字典,其中键为"Time"values和values是字符串的字典。然后构造DataFrame对象:
tmp = {}
for d in data:
tmp.setdefault(d.pop('Time'), {}).update(d)
out = pd.DataFrame.from_dict(tmp, orient='index').rename_axis(index=['Time'])
输出:
String_8 String_9 String_10 String_11 String_12 String_13
Time
18057610.0 -1.420900e-15 2.735300e-16 1.193500e-15 1.1624 -6.169200e-15 3.221800e-15
18057620.4 2.437700e-16 -6.280900e-15 1.645600e-15 1.1651 1.714700e-15 9.887200e-16
18057631.1 4.112400e-15 1.559800e-15 -2.325000e-16 1.1638 -3.998300e-15 4.459000e-16
您可以尝试itertools.groupby
:
from itertools import groupby
from collections import ChainMap
df = pd.DataFrame([ChainMap(*g) for _, g in groupby(data, lambda k: k["Time"])])
print(df.set_index("Time"))
打印:
String_10 String_11 String_12 String_13 String_8 String_9
Time
18057610.0 1.193500e-15 1.1624 -6.169200e-15 3.221800e-15 -1.420900e-15 2.735300e-16
18057620.4 1.645600e-15 1.1651 1.714700e-15 9.887200e-16 2.437700e-16 -6.280900e-15
18057631.1 -2.325000e-16 1.1638 -3.998300e-15 4.459000e-16 4.112400e-15 1.559800e-15