当前位置: 首页 > 面试题库 >

Python:日期到季节

钱震博
2023-03-14
问题内容

我想将日期时间序列转换为季节,例如第3、4、5个月,我想用2(春季)替换它们;对于6、7、8个月,我想用3(夏季)等替换它们。

所以,我有这个系列

id
1       2011-08-20
2       2011-08-23
3       2011-08-27
4       2011-09-01
5       2011-09-05
6       2011-09-06
7       2011-09-08
8       2011-09-09
Name: timestamp, dtype: datetime64[ns]

这是我一直在尝试使用的代码,但无济于事。

# Get seasons
spring = range(3, 5)
summer = range(6, 8)
fall = range(9, 11)
# winter = everything else

month = temp2.dt.month
season=[]

for _ in range(len(month)):
    if any(x == spring for x in month):
       season.append(2) # spring 
    elif any(x == summer for x in month):
        season.append(3) # summer
    elif any(x == fall for x in month):
        season.append(4) # fall
    else:
        season.append(1) # winter

for _ in range(len(month)):
    if month[_] == 3 or month[_] == 4 or month[_] == 5:
        season.append(2) # spring 
    elif month[_] == 6 or month[_] == 7 or month[_] == 8:
        season.append(3) # summer
    elif month[_] == 9 or month[_] == 10 or month[_] == 11:
        season.append(4) # fall
    else:
        season.append(1) # winter

两种解决方案均无效,特别是在第一个实现中,我收到一个错误:

ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

而第二个是有错误的大列表。有什么想法吗?谢谢


问题答案:

您可以使用简单的数学公式将一个月压缩为一个季节,例如:

>>> [month%12 // 3 + 1 for month in range(1, 13)]
[1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 1]

因此,对于使用向量运算的用例(@DSM点数):

>>> temp2.dt.month%12 // 3 + 1
1    3
2    3
3    3
4    4
5    4
6    4
7    4
8    4
Name: id, dtype: int64


 类似资料:
  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样

  • 问题内容: 除了运气,我什么都没有,所以为什么不重试呢? 我有一个应用程序需要根据一年中的季节(春季,夏季,冬季,秋季)显示不同的图像。对于这些季节,我有非常具体的开始和结束日期。 我想从您的天才那里得到一个叫GetSeason的方法,该方法将日期作为输入并返回Spring,Summer,W​​inter或Fall的字符串值。以下是日期范围及其相关的季节: 春季:3 / 1-4 / 30 夏季:5

  • 问题内容: 如何在python中将字符串转换为日期对象? 该字符串是:(对应于格式:) 我不想要datetime.datetime对象,而是想要datetime.date。 问题答案: 您可以在Python包中使用:

  • 问题内容: 给定2个日期(StartDate和EndDate),我该如何在Pl / SQL中生成季度周期。 例子: 预期产量: 问题答案: 参数规则,您可能需要调整查询以适合您的目的: 如果start_date不是确切的季度开始日期,则它有效地使用季度包含开始日期。 如果end_date不是确切的季度末,那么我们将在end_date之前的那个季度结束(而不是包含结束日期的那个季度)。

  • 问题内容: 我在任何地方都找不到。我从返回标准JSON日期的API中获取了一些JSON。您可以通过在JavaScript控制台中运行以下代码来查看格式: 好吧,实际上,我正在使用的API不会返回毫秒部分,有时会返回一个时区而不是,因此日期看起来可能像以下任何一个: 解析这些日期有点麻烦。有没有办法使用解析这些日期? 我当前的解决方案是: 啊! 问题答案: 该DateTime格式实际上是ISO 86

  • 问题内容: 如何将特定日期从Java存储到数据库?(不仅是今天的日期,而且还有用户想要指定的一些日期) 问题答案: 用 类型和被假定分别用于设置日期和时间戳字段。阅读他们的文档,了解它们之间以及与和之间的区别。 通常,您会从用户那里获得一个Java日期()。您使用将该时间转换为自纪元以来的毫秒数,然后转换回a 或如我所示。