Python:从DataFrame字典格式列提取浮点值及代码错误排查
问题分析与解决
原始DataFrame:
Date comp 01-01-2022 {'dfp':25.02,'ftp':12.06} 01-02-2022 {'dfp':12.01,'ftp':40.05} 01-03-2022 {'dfp':50.20,'ftp':35.25}
需求:新增一列
New,提取comp列字典中的dfp浮点值,预期输出:Date comp New 01-01-2022 {'dfp':25.02,'ftp':12.06} 25.02 01-02-2022 {'dfp':12.01,'ftp':40.05} 12.01 01-03-2022 {'dfp':50.20,'ftp':35.25} 50.20
尝试的错误代码:
def new_col(x): for i in range(len(df)): return x[i]['dfp'] df['New'] = df['comp'].apply(new_col)
问题原因
apply方法会把comp列的每个单独字典元素传入new_col函数,也就是参数x本身就是单个字典(比如{'dfp':25.02,'ftp':12.06}),不是整个列的列表。你用x[i]对字典做整数索引,这不符合字典的访问规则(字典只能通过键名访问),直接触发报错。- 函数里的
for循环完全多余,而且第一次循环就执行return,根本不会完成遍历,逻辑完全错误。
正确解法
方法1:用apply直接提取键值
最简单的方式,对每个字典直接取'dfp'键:
df['New'] = df['comp'].apply(lambda x: x['dfp'])
如果需要扩展逻辑,也可以用自定义函数:
def get_dfp(x): return x['dfp'] df['New'] = df['comp'].apply(get_dfp)
方法2:用str.get方法(更简洁)
Pandas的Series对象支持str.get方法直接提取字典键值,代码更短:
df['New'] = df['comp'].str.get('dfp')
内容的提问来源于stack exchange,提问作者Kaaviya V
相关产品推荐
相关产品推荐

