首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将长度不同的dict值转换为一个列表,然后将该列表添加到Dataframe中。

将长度不同的dict值转换为一个列表,然后将该列表添加到Dataframe中。
EN

Stack Overflow用户
提问于 2020-02-28 13:54:58
回答 2查看 25关注 0票数 0

我的问题是对a question I asked last week的跟进.

我有一些数据是作为字典的list提供的。字典的值是不同长度的list值的int值。它们在一个名为pandas DataFramedf_sim (列名rrintervals)中

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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]

我试着用上一个问题中最好的答案,这个问题推荐使用列表理解。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-28 14:04:42

哈哈。在发完这篇文章后,我发现了我正在寻找的东西。

我在我的list循环之外创建了一个空的for,用列表理解的结果填充它,然后将填充的列表分配给一个新列。

代码语言:javascript
运行
复制
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

我愿意接受其他的答案!

票数 0
EN

Stack Overflow用户

发布于 2020-02-28 14:34:13

你的解决方案似乎很好。

如果你想要一条线:

代码语言:javascript
运行
复制
df['rr_list'] = df['rrintervals'].apply(lambda x: pd.DataFrame.from_records(x).sum())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60453183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档