我有一个 datetime
系列,需要将每个条目的日期更改为 1
。我想过很多简单的解决方案,但没有一个对我有用。目前,唯一真正有效的是
- 将系列设置为索引
- 从索引中查询年月
- 使用年、月和 1 重建新的时间序列
它不可能真的那么复杂,不是吗?有月份开始,但不幸的是 offset
,这在这里没有用。该方法似乎没有 set()
功能,当系列是一列而不是索引本身(的一部分)时,功能甚至更少。
唯一相关的问题是 this ,但那里使用的技巧在这里不适用。
原文由 FooBar 发布,翻译遵循 CC BY-SA 4.0 许可协议
其他两个答案有效,但既不优雅也不符合
pandas
库的精神。相反,请考虑这个,在我的测试中,它也比 Kyle Barron 的矢量化答案快一点。它是一个不需要定义任何外部函数的单行代码,经过矢量化处理,并保留在pandas
生态系统中:此方法的额外好处是支持许多其他频率下限,例如每周 (
'W'
) 或工作日 ('B'
),使用上述矢量化方法实施起来会比较棘手.您可以 在相关文档页面中 找到各种其他频率的缩写。
这当然假设
dtseries
是一个日期时间系列,如果不是,您可以使用pd.to_datetime(my_series)
轻松转换它。该解决方案还允许在使用各种偏移方面具有极大的灵活性。例如,要使用该月的第十天:
我建议您查看 文档中的 pandas offsets 。偏移量 pandas 提供了很多相当复杂的偏移量支持,例如工作日、假期、工作时间等……正如@KyleBarron 和@JonClements 的回答所建议的那样,手动实施这些偏移量将非常麻烦。例如,考虑这个例子,让日期从月初开始偏移 5 个工作日: