如何提取DataFrame中列表内的指定值生成衍生列?
从包含字典的列表列中提取指定值生成衍生列
给定如下结构的DataFrame,其中Index列的每个元素是仅包含一个字典的列表:
import pandas as pd # 构造示例数据 data = { 'Index': [[{'cadence': '2022-12-07 14:02:28.012', 'id': 'RJASTD'}], [{'cadence': '2022-12-07 14:02:28.012', 'id': 'NMRFAS'}]], 'Name': ['Sarah', 'James'] } df = pd.DataFrame(data)
对应的DataFrame展示:
| Index | Name |
|---|---|
| [{'cadence': '2022-12-07 14:02:28.012', 'id': 'RJASTD'}] | Sarah |
| [{'cadence': '2022-12-07 14:02:28.012', 'id': 'NMRFAS'}] | James |
需要提取每个列表中字典的id值,生成Index1列,最终目标效果如下:
| Index1 | Name |
|---|---|
| RJASTD | Sarah |
| NMRFAS | James |
解决方案
你之前尝试的lstrip()、replace()属于字符串处理方法,但Index列的元素是列表对象,不是字符串,因此这类方法无效。可以通过以下两种方式直接操作列表和字典提取目标值:
方法1:使用apply配合lambda函数
对Index列的每个元素,先取列表的第一个元素(即目标字典),再提取字典中id键对应的值:
df['Index1'] = df['Index'].apply(lambda x: x[0]['id'])
方法2:使用Pandas的嵌套索引语法(更简洁)
利用Pandas对嵌套结构的支持,通过str索引直接访问列表和字典的层级元素:
df['Index1'] = df['Index'].str[0].str['id']
验证结果
执行上述任一代码后,筛选目标列查看效果:
print(df[['Index1', 'Name']])
输出结果:
Index1 Name 0 RJASTD Sarah 1 NMRFAS James
内容的提问来源于stack exchange,提问作者Sanket Sathe
相关产品推荐
相关产品推荐

