Python 将长度不同的列表中的dict值转换为一个列表,然后将该列表添加到数据帧中

Python 将长度不同的列表中的dict值转换为一个列表,然后将该列表添加到数据帧中,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,我的问题是一个后续问题 我的数据是作为词典的列表提供的。字典的值是长度不同的int值的list。它们位于名为df\U sim(列名rrintervals)的pandas数据框中 我希望将列rrintervals中的所有dict值存储到一个列表中,并希望将其存储在df_sim中的一个新列中,名为rr_list startedat rrintervals rr_list 0 2

我的问题是一个后续问题

我的数据是作为词典的
列表提供的。字典的值是长度不同的
int
值的
list
。它们位于名为df\U sim(列名
rrintervals
)的
pandas
数据框中

我希望将列
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                                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
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1表示df_sim.索引中的i:
---->2 df_sim.loc[i,“rr_list”]=“df_sim.loc中的子目录val[i,“rrintervals”]子目录val['values']]
~/anaconda3/lib/python3.7/site-packages/pandas/core/index.py in\uuuuuuu setitem\uuuuuuu(self,key,value)
668 key=com.apply\u如果可调用(key,self.obj)
669 indexer=self.\u get\u setitem\u indexer(键)
-->670带索引器(索引器,值)的self.\u setitem\u
671
672定义验证键(自、键、轴:int):
~/anaconda3/lib/python3.7/site-packages/pandas/core/index.py在带有索引器(self,indexer,value)的setitem中
1015如果透镜(标签)!=len(值):
1016升值错误(
->1017“必须具有相等的len键和值”
1018“使用iterable设置时”
1019                         )
ValueError:使用iterable设置时,必须具有相等的len键和值

哈哈。在发布这篇文章之后,我找到了我想要的东西

我在我的
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


我愿意接受其他答案

您的解决方案似乎很好。
如果您想要一个班轮:

df['rr_list'] = df['rrintervals'].apply(lambda x: pd.DataFrame.from_records(x).sum())
df['rr_list'] = df['rrintervals'].apply(lambda x: pd.DataFrame.from_records(x).sum())