【问题标题】:Reading in Date / Time Values Correctly正确读取日期/时间值
【发布时间】:2021-12-19 03:02:25
【问题描述】:

关于如何操作我当前的日期时间数据以使其适合在将数据类型转换为时间时使用的任何想法? 例如:

df1['Date/Time'] = pd.to_datetime(df1['Date/Time'])

数据的当前格式为 mm/dd 00:00:00

数据框中的列示例如下所示。

          Date/Time  Dry_Temp[C]  Wet_Temp[C]  Solar_Diffuse_Rate[[W/m2]]  \
0   01/01  00:10:00         8.45     8.237306                         0.0   
1   01/01  00:20:00         7.30     6.968360                         0.0   
2   01/01  00:30:00         6.15     5.710239                         0.0   
3   01/01  00:40:00         5.00     4.462898                         0.0   
4   01/01  00:50:00         3.85     3.226244                         0.0

【问题讨论】:

  • df1['Date/Time'] = pd.to_datetime(df1['Date/Time'], format='%m:5d %H:%M:%S') 将为您提供月份和日期,年份是纪元的开始。这是你要找的吗?
  • 这对我不起作用,我相信你的意思是 % 而不是 5 我试过但没有运气
  • 是的,你是对的,

标签: python pandas date datetime


【解决方案1】:

对于将小时表示为 24 的情况,您有两种选择。首先,您可以简单地将小时重置为 00,然后您可以将小时重置为 00,并将日期加 1。
无论哪种情况,第一步都是检测可以使用简单的 find 语句t.find(' 24:') 完成的条件 在第一种情况下检测到条件后,只需将小时重置为 00 并继续格式化字段的过程即可。但是,在第二种情况下,将日期加 1 会稍微复杂一些,因为您可以滚动到下个月。

这是我将使用的方法:

给定一个 df 的形式:

    Date Time
0   01/01 00:00:00
1   01/01 00:24:00
2   01/01 24:00:00
3   01/31 24:00:00  

第一个案例

def parseDate2(tx):
    ti = tx.find('  24:')
    if ti >= 0:
        tk = pd.to_datetime(tx[:5]+'  00:'+tx[10:], format= '%m/%d  %H:%M:%S') 
        return tk + du.relativedelta.relativedelta(hours=+24)
    return pd.to_datetime(tx, format= '%m/%d  %H:%M:%S')        

df['Date Time'] = df['Date Time'].apply(lambda x: parseDate(x))

产生以下内容:

    Date Time
0   1900-01-01 00:00:00
1   1900-01-01 00:24:00
2   1900-01-01 00:00:00
3   1900-01-31 00:00:00

对于第二种情况,我使用了 dateutil relativedelta 库并稍微修改了我的 parseDate 函数,如下所示:

import dateutil as du
def parseDate2(tx):
    ti = tx.find('  24:')
    if ti >= 0:
        tk = pd.to_datetime(tx[:5]+'  00:'+tx[10:], format= '%m/%d  %H:%M:%S') 
        return tk + du.relativedelta.relativedelta(hours=+24)
    return pd.to_datetime(tx, format= '%m/%d  %H:%M:%S')        

df['Date Time'] = df['Date Time'].apply(lambda x: parseDate2(x))  

产量:

    Date Time
0   1900-01-01 00:00:00
1   1900-01-01 00:24:00
2   1900-01-02 00:00:00
3   1900-02-01 00:00:00

​

【讨论】:

  • 非常感谢您!
【解决方案2】:

要访问日期时间(即时间)的值,您可以使用:

# These are now in a usable format
seconds = df1['Date/Time'].dt.second
minutes = df1['Date/Time'].dt.minute
hours = df1['Date/Time'].dt.hours

如果需要,您可以创建自己的独立时间序列:

df1['Dat/Time'].dt.time

【讨论】:

  • 嗨,这似乎对我不起作用:(
  • 正如@itproh66 推断的那样,我当时没有意识到(现在仍然不确定):您的输入是字符串吗?如果是这样,您可以使用他提供的格式传递它,并使用我上面提到的变量来操作数据。一些额外的代码示例会有所帮助,尤其是理想的之前/之后(期望的结果)。
  • 我想我找到了问题所在,即在我的日期/时间列中,我有一些值显示为 24:00:00,DateTime 库不支持,你有关于如何编辑所有 24:00:00 单元格以使它们读取 00:00:00 的任何想法?
  • 是的,当前格式是字符串
  • 如果小时=n 24,你想做什么?重置为 00 或将天数增加 1 并将小时重置为 00?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 2016-03-05
  • 2023-04-02
  • 2020-03-26
  • 2017-11-02
  • 2020-06-17
  • 2016-08-15
相关资源
最近更新 更多