从列表嵌套字典的Pandas DataFrame列提取值时遇NaN问题求助
解决Pandas提取嵌套字典value返回NaN的问题
你当前代码返回NaN的核心问题有两个:
Data列是混合类型(整数、嵌套字典的列表),str['value']只对字符串类型生效,非字符串行直接返回NaN- 就算是列表类型的行,也得先取出列表里的字典元素,再去提取
value,直接用str['value']根本触不到字典里的键
用apply自定义处理逻辑就能解决,代码如下:
import pandas as pd data = [10,[{'self': 'https://elia.atlassian.net/rest/api/3/customFieldOption/10200', 'value': 'IT-Sourced Changes 2022', 'id': '10200'}],30] df = pd.DataFrame(data, columns=['Data']) # 自定义函数提取目标value def extract_value(item): # 先判断是否为非空列表 if isinstance(item, list) and len(item) > 0: # 再判断列表第一个元素是字典且包含'value'键 if isinstance(item[0], dict) and 'value' in item[0]: return item[0]['value'] # 不符合条件返回规范缺失值 return pd.NA df['new_col'] = df['Data'].apply(extract_value) print(df.head(3))
运行后第二行的new_col会得到IT-Sourced Changes 2022,其余两行返回pd.NA(比NaN更严谨的缺失值标识)。如果你的列表里有多个字典,想提取所有value,可以把返回逻辑改成[d.get('value') for d in item if isinstance(d, dict)]。
内容的提问来源于stack exchange,提问作者elia_Werner
相关产品推荐
相关产品推荐

