如何为pandas timedelta类型Series批量提取days属性?
问题解答
为什么会出现KeyError: 12?
你可能没意识到——这个错误确实和索引的“字典式”查找逻辑有关!Pandas的Series本质是一个带标签索引的有序集合,当你写age[i]时,它是在按索引标签查找元素,而非按位置顺序。如果你的Series索引不是连续的0、1、2……这类整数(比如中间有缺失的索引值,或是索引为其他类型),当循环到i=12时,你的Series里根本没有标签为12的元素,自然就抛出了KeyError。
举个直观的例子:如果你的Series索引是[0,1,2,...,11,13,14,...],那当循环到i=12时,age[12]找不到对应的元素,就会触发这个错误。
如何批量提取.days属性?
推荐两种方法,优先选择第一种(Pandas原生向量化操作,效率最高):
- 使用
dt访问器(最推荐)
Pandas专为Timedelta类型的Series提供了dt访问器,能直接批量提取属性,一行代码就能搞定:
age_new = ages.dt.days
得到的age_new是整数类型的Series,完全满足需求,而且比循环高效得多,数据量越大优势越明显。
- 如果一定要用循环,按位置访问元素
要是你坚持用循环实现,记得按位置而非索引标签访问元素,用iloc方法:
age_new = [] for i in range(len(ages)): age_new.append(ages.iloc[i].days)
或者用更简洁的列表推导式:
age_new = [x.days for x in ages]
这两种方式都会按顺序遍历Series的每一个元素,不受索引标签的影响,也就不会出现KeyError了。
内容的提问来源于stack exchange,提问作者cool_beans
相关产品推荐
相关产品推荐

