我的问题是对a question I asked last week的跟进.
我有一些数据是作为字典的list
提供的。字典的值是不同长度的list
值的int
值。它们在一个名为pandas
DataFrame
的df_sim
(列名rrintervals
)中
startedat rrintervals
0 2020-02-27 15:06:35 [{'values': [727.0]}, {'values': [693.0, 688.0...
1 2020-02-27 15:06:22 [{'values': [1067.0]}, {'values': [921.0]}, {'...
2 2020-02-27 15:36:52 [{'values': [776.0]}, {'values': [826.0, 938.0..
IN:
print(df_sim.loc[0, "rrintervals"])
OUT:
[{'values': [727.0]}, {'values': [693.0, 688.0]}, {'values': [689.0]}, {'values': [699.0]}]
我希望将列rrintervals
中的所有dict值都放在一个列表中,并且我希望将其存储在df_sim
中的一个新列中,名为rr_list
。
startedat rrintervals rr_list
0 2020-02-27 15:06:35 [{'values': [727.0]}, {'values': [693.0, 688.0... [727.0, 693.0, 688.0...]
1 2020-02-27 15:06:22 [{'values': [1067.0]}, {'values': [921.0]}, {'... [1067.0, 921.0...]
2 2020-02-27 15:36:52 [{'values': [776.0]}, {'values': [826.0, 938.0.. [776.0, 826.0, 938.0...]
IN:
print(df_sim.loc[0, "rr_list"])
OUT:
[727.0, 693.0, 688.0, 689.0, 699.0]
我试着用上一个问题中最好的答案,这个问题推荐使用列表理解。
for i in df_sim.index:
df_sim.loc[i, "rr_list"] = [val for sub_dict in df_sim.loc[i, "rrintervals"] for val in sub_dict['values']]
但我一直拿着ValueError
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-152-c50bd1585f57> in <module>
1 for i in df_sim.index:
----> 2 df_sim.loc[i, "rr_list"] = [val for sub_dict in df_sim.loc[i, "rrintervals"] for val in sub_dict['values']]
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py in __setitem__(self, key, value)
668 key = com.apply_if_callable(key, self.obj)
669 indexer = self._get_setitem_indexer(key)
--> 670 self._setitem_with_indexer(indexer, value)
671
672 def _validate_key(self, key, axis: int):
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
1015 if len(labels) != len(value):
1016 raise ValueError(
-> 1017 "Must have equal len keys and value "
1018 "when setting with an iterable"
1019 )
ValueError: Must have equal len keys and value when setting with an iterable
发布于 2020-02-28 14:04:42
哈哈。在发完这篇文章后,我发现了我正在寻找的东西。
我在我的list
循环之外创建了一个空的for
,用列表理解的结果填充它,然后将填充的列表分配给一个新列。
rr_list = []
for i in df_sim.index:
rr_list.append([val for sub_dict in df_sim.loc[i, "rrintervals"] for val in sub_dict['values']])
df_sim["rr_list"] = rr_list
我愿意接受其他的答案!
发布于 2020-02-28 14:34:13
你的解决方案似乎很好。
如果你想要一条线:
df['rr_list'] = df['rrintervals'].apply(lambda x: pd.DataFrame.from_records(x).sum())
https://stackoverflow.com/questions/60453183
复制相似问题