【问题标题】:Convert data type series to datetime将数据类型系列转换为日期时间
【发布时间】:2019-12-10 11:48:42
【问题描述】:

我有一列是系列,我想转换为日期时间格式。我的数据框的这一特定列如下所示:

x
Aug 1, 2019 7:20:04 AM
Aug 1, 2019 7:20:14 AM
Aug 1, 2019 7:20:24 AM
Aug 1, 2019 7:20:34 AM

我似乎在这里找到了一些答案,并尝试相应地调整我的代码。

datetime.datetime.strptime(df["x"],'%b %d, %Y %H:%M:%S %a').strftime('%d/%m/%Y %H:%M:%S')

但我收到以下错误:

strptime() 参数 1 必须是 str,而不是 Series

出于这个原因,我尝试使用以下方法转换为字符串:

df['x'] = df['x'].apply(str)
df['x'] = df['x'].to_string()
df['x'] = df['x'].astype(str)

但它不起作用。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    我假设您使用的是pandas。您可以使用 pandas to_datetime() 函数而不是 datetimes 函数,后者只能为给定调用转换单个值。同样对于上午/下午,您需要 %p 而不是 %a

    df['x'] = pd.to_datetime(df['x'], format="%b %d, %Y %H:%M:%S %p")
    

    编辑

    检查以确保您的数据与您发布的完全相同。我复制并粘贴了您的数据,并创建了一个数据框,它可以正常工作。

    df = pd.DataFrame({'x':['Aug 1, 2019 7:20:04 AM','Aug 1, 2019 7:20:14 AM','Aug 1, 2019 7:20:24 AM','Aug 1, 2019 7:20:34 AM']})
    

    输出:

                            x
    0  Aug 1, 2019 7:20:04 AM
    1  Aug 1, 2019 7:20:14 AM
    2  Aug 1, 2019 7:20:24 AM
    3  Aug 1, 2019 7:20:34 AM
    
    
    
    df['x'] = pd.to_datetime(df['x'],format='%b %d, %Y %H:%M:%S %p')
    

    输出:

                        x
    0 2019-08-01 07:20:04
    1 2019-08-01 07:20:14
    2 2019-08-01 07:20:24
    3 2019-08-01 07:20:34
    

    【讨论】:

    • 您也可以创建一个 lambda 函数并使用 DataFrame.apply 以元素方式完成它,但我认为您的解决方案更清晰。
    • 感谢您回答我。我仍然收到错误:“与格式不匹配 '%b %d, %Y %H:%M:%S %a'”
    • 还是不行。相同类型的错误:不匹配格式 '%b %d, %Y %H:%M:%S %p'
    • 不知道为什么,因为它对我有用。尝试打印您的数据并确保它匹配并且您拥有正确的列。
    • 我重新启动了内核,现在它可以工作了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多