【问题标题】:Remove part of a string from pd.to_datetime() unconverted values从 pd.to_datetime() 未转换的值中删除部分字符串
【发布时间】:2022-11-22 19:21:09
【问题描述】:

我尝试使用 pd.to_datetime(df, format='%Y-%m-%d_%H-%M-%S') 将一列日期转换为 datetime 但我收到错误 ValueError: unconverted data remains: .1

我跑了:

data.loc[pd.to_datetime(data.date, format='%Y-%m-%d_%H-%M-%S', errors='coerce').isnull(), 'date']

找出问题所在。 date 列中的 119/1037808 日期在其末尾有一个额外的“.1”。除了“.1”之外,日期都很好。如何仅从这些日期的末尾删除“.1”,然后将列值转换为日期时间?

这是一个重现问题的示例数据框:

import pandas as pd

data = pd.DataFrame({"date" : ["2022-01-15_08-11-00.1","2022-01-15_08-11-30","2022-01-15_08-12-00.1", "2022-01-15_08-12-30"], 
                     "value" : [1,2,3,4]})

我努力了:

data.date = data.date.replace(".1", "")

data = data.replace(".1", "")

但这些并没有删除“.1”。最终结果应如下所示:

data = pd.DataFrame({"date" : ["2022-01-15_08-11-00","2022-01-15_08-11-30","2022-01-15_08-12-00", "2022-01-15_08-12-30"], 
                         "value" : [1,2,3,4]})

【问题讨论】:

    标签: python pandas string datetime


    【解决方案1】:

    您可以使用 pandas.Series.replace 去除多余的点/数字:

    data["date"]= pd.to_datetime(data["date"].replace(r".d+", "",
                                                      regex=True),
                                 format="%Y-%m-%d_%H-%M-%S")
    

    # 输出 :

    print(data)
    print(data.dtypes)
    
                     date  value
    0 2022-01-15 08:11:00      1
    1 2022-01-15 08:11:30      2
    2 2022-01-15 08:12:00      3
    3 2022-01-15 08:12:30      4
    date     datetime64[ns]
    value             int64
    dtype: object
    

    如果您不想要日期时间格式,请仅使用data["date"].replace(r".d+", "", regex=True)

    【讨论】:

      【解决方案2】:
      data = data.assign(date=pd.to_datetime(data['date'].str.split('.').str[0], format="%Y-%m-%d_%H-%M-%S"))
      

      【讨论】:

        猜你喜欢
        • 2014-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多