Python 如何从字典列表中的特定值在单独的Dataframe列中创建列表?

Python 如何从字典列表中的特定值在单独的Dataframe列中创建列表?,python,pandas,dataframe,list-comprehension,apply,Python,Pandas,Dataframe,List Comprehension,Apply,我有一个名为'new\u api\u df'的数据框架,其中有一个名为new\u api\u df['Categories']的列,其中包含一个字典列表: [{'CallId': 22143866, 'BucketId': 1953, 'SectionId': 1256, 'BucketFullName': 'Categories.Filters.No Sale Made', 'Weight': 1.0} , {'CallId': 22143866, 'BucketId': 2016, 'Sec

我有一个名为
'new\u api\u df'
的数据框架,其中有一个名为
new\u api\u df['Categories']
的列,其中包含一个字典列表:

[{'CallId': 22143866, 'BucketId': 1953, 'SectionId': 1256, 'BucketFullName': 'Categories.Filters.No Sale Made', 'Weight': 1.0}
, {'CallId': 22143866, 'BucketId': 2016, 'SectionId': 1255, 'BucketFullName': 'Categories.Imported.Objections', 'Weight': 3.0}
, {'CallId': 22143866, 'BucketId': 2017, 'SectionId': 1255, 'BucketFullName': 'Categories.Imported.Touting Benefits', 'Weight': 1.0}
]
我想获取每个“BucketFullName”,并将这些值放入一个单独列中的列表中
new\u api\u df['category\u list']
,如下所示:

['Categories.Filters.No Sale Made'、'Categories.Imported.objectives'、Categories.Imported.Touting Benefits']

我尝试过使用列表理解,例如:

new_-api_-df['category_list']=[item['BucketFullName']用于新_-api_-df['Categories']用于字典中的项目]

但获取错误:
ValueError:值的长度与索引的长度不匹配

我还尝试了应用和列表理解:
new_-api_-df['category_-list']=new_-api_-df['Categories']应用([item['BucketFullName']用于new_-api_-df['Categories']用于dictionary中的项])

但我得到了以下错误:
AttributeError:“Categories.Filters.No Sale Made”不是“Series”对象的有效函数

我也尝试过:
new\u api\u df['category\u list']=df['Categories'].apply(lambda x:x['BucketFullName')

但是得到错误:
TypeError:list索引必须是整数或片,而不是str

新的api df切片:

新的api文件位置[0]:

Contact            {'Id': 22143866, 'Type': 'Call', 'WavPath': '\...
RecordInfo         {'Id': 22143866, 'RowNumber': 1, 'TotalRowCoun...
Measures           {'ID': 22143866, 'TotalHoldCount': 0, 'Agitati...
Others             {'ConfidenceAverage': 69, 'SequenceID': None, ...
Sections           [{'CallId': 22143866, 'SectionId': 1041, 'Sect...
Categories         [{'CallId': 22143866, 'BucketId': 1953, 'Secti...
Scores             [{'CallId': 22143866, 'ScoreId': 399, 'ScoreNa...
ScoreComponents    [{'CallId': 22143866, 'ScoreComponentId': 4497...```
我想你想要

df=pd.DataFrame({'Categories':[{'CallId': 22143866, 'BucketId': 1953, 'SectionId': 1256, 'BucketFullName': 'Categories.Filters.No Sale Made', 'Weight': 1.0}
, {'CallId': 22143866, 'BucketId': 2016, 'SectionId': 1255, 'BucketFullName': 'Categories.Imported.Objections', 'Weight': 3.0}
, {'CallId': 22143866, 'BucketId': 2017, 'SectionId': 1255, 'BucketFullName': 'Categories.Imported.Touting Benefits', 'Weight': 1.0}
]})

df['category_list']=df['Categories'].apply(lambda x: x[0]['BucketFullName'])
print(df)

#                                          Categories  \
#0  {'CallId': 22143866, 'BucketId': 1953, 'Sectio...   
#1  {'CallId': 22143866, 'BucketId': 2016, 'Sectio...   
#2  {'CallId': 22143866, 'BucketId': 2017, 'Sectio...   
#
#                          category_list  
#0       Categories.Filters.No Sale Made  
#1        Categories.Imported.Objections  
#2  Categories.Imported.Touting Benefits  
更新

请注意,这将为每个单元格创建一个列表

df['category_list']=df['Categories'].apply(lambda x: [m_dict['BucketFullName'] for m_dict in x])
然后你可以用


为什么不
new\u api\u df['category\u list']=df['Categories'].apply(lambda x:x['BucketFullName'])
?@ansev我试过了,但我得到了一个错误:TypeError:list索引必须是整数或片,而不是strcould你能显示你的数据帧吗?我想你在dataframeansev建议的每个单元格中都有一个列表,但我得到了一个错误:TypeError:列表索引必须是整数或片,而不是strc。你能在你的问题中复制并粘贴一片
打印(df['categories'])
?当然,我可以肯定地做到这一点,这表明在类别的第一行中有一个列表,因此首先您必须访问列表(每个单元格),然后访问列表中包含的字典,如果列表只有一个字典,只需执行
x[0]['BucketFullName']
您应该知道您的数据以及如何在列表/字典中进行迭代
df = df.explode('category_list')
#(df['Categories'].apply(lambda x: [m_dict['BucketFullName'] for m_dict in x])                                                             
#                  .explode()) #check the explode serie