【问题标题】:How to read 24:00 hour?如何阅读 24:00 小时?
【发布时间】:2021-08-22 18:43:45
【问题描述】:

我有一个 24:00 小时而不是 00:00 的 csv 文件,并尝试使用 pandas 读取它。我找到了解决方案并尝试采用它。问题是,我收到一个错误,不知道如何解决它。有人可以帮我吗?

我的 csv:

    Datetime            Value
45  01.01.2021 23:00    2.7     
46  01.01.2021 23:30    2.9     
47  01.01.2021 24:00    1.5     
48  02.01.2021 00:30    1.2     
49  02.01.2021 01:00    1.9     
50  02.01.2021 01:30    1.9     

我从上面的链接获得的代码被我的案例采用:

df['Datetime'] = (pd.to_datetime(df['Datetime'].str[:10], format='%d.%m.%Y') + 
              pd.to_timedelta(df['Datetime'].str[10:12]+':'+df['Datetime'].str[12:14]+':00'))

我得到的错误:

expecting hh:mm:ss format, received:  0:0::00

我得到转换函数的链接:

Pandas: parsing 24:00 instead of 00:00

【问题讨论】:

  • 不要只是复制和粘贴,您必须使代码适应您的输入格式。抱歉,如果我对链接问题的回答在这方面具有误导性;-)

标签: python pandas dataframe datetime


【解决方案1】:

你可以使用str.split()+pd.to_datetime()+pd.to_timedelta():

s=df['Datetime'].str.replace('.','-').str.split(expand=True)
df['Datetime']=pd.to_datetime(s[0])+pd.to_timedelta(s[1]+':00')

df['Datetime']=pd.to_datetime(df['Datetime'].str[:10], format='%d.%m.%Y')+pd.to_timedelta(df['Datetime'].str[10:]+':00')

df的输出:

    Datetime                Value
45  2021-01-01 23:00:00     2.7
46  2021-01-01 23:30:00     2.9
47  2021-01-02 00:00:00     1.5
48  2021-02-01 00:30:00     1.2
49  2021-02-01 01:00:00     1.9
50  2021-02-01 01:30:00     1.9

【讨论】:

  • 非常感谢。第二种解决方案是我采用的解决方案。知道为什么我的解决方案中出现预期格式的错误吗?
  • @Gobrel df['Datetime'].str[10:12]df['Datetime'].str[12:14] 在您的方法中产生问题,因为它们只选择一个字符,因此更正的字符是 df['Datetime'].str[10:13]df['Datetime'].str[13:16]
【解决方案2】:

你可以像这样替换它们:

df['Datetime'] = np.where(df['Datetime'].str.contains('24:00'), pd.to_datetime(df['Datetime'].str.replace('24:00', '00:00')) + pd.Timedelta(days=1), pd.to_datetime(df['Datetime']))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多