【问题标题】:Change Date/Timestamp Format from Excel object datatype to Pandas Dataframe (String)将日期/时间戳格式从 Excel 对象数据类型更改为 Pandas 数据框(字符串)
【发布时间】:2020-07-01 14:13:02
【问题描述】:

所以我设法从 Excel 中提取了一个特定的单元格,但现在我得到了这个:

2020-01-30T00:00:00.000000000

我通过使用拆分功能删除了“T”之后的字符:

d1 = d.str.split("T",n=1, expand=True)[0]

结果是: 2020-01-30

我的问题是如何将日期格式更改为 dd/mm/yyyy。

我知道 strftime 函数,因为我没有从中得到结果。错误始终表明该系列没有系列属性或 date.datetime 不是字符串的属性。

这是工作代码:

    import pandas as pd 
    import datetime

    df = pd.read_csv('test1.xlsx',
    #header=None,
    #names = headers,
    dtype = dtypes,
    parse_dates = pdate, 
    date_parser=None) 


    d = df['AA']
    d1 = d.str.split("T",n=1, expand=True)[0]
    d2 = d1[0]

    print(d2)

              AA  Num
    0 2020-01-01    5
    1 2020-02-01   10
    2 2020-03-01   15
    3 2020-04-01   20
    4 2020-05-01   25

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    我已经使用您的示例创建了一个数据框,答案如下:

    import pandas as pd
    from datetime import datetime
    

    然后我创建了数据框。

    data = {'date': ['2020-01-01T00:00:00.000000000','2020-02-01T00:00:00.000000000','2020-03-01T00:00:00.000000000','2020-04-01T00:00:00.000000000','2020-05-01T00:00:00.000000000'],
            'num':[5, 10, 15, 20, 25]
           }
    df = pd.DataFrame(data, columns = ['date', 'num'])
    

    现在,答案部分:

    df['date'] = pd.to_datetime(df['date']).dt.strftime('%d/%m/%Y')
    

    要显示四位数年份,您需要传递大写“Y”。而且你需要使用 dt.strftime 才能工作。

           date     num
    0   01/01/2020  5
    1   01/02/2020  10
    2   01/03/2020  15
    3   01/04/2020  20
    4   01/05/2020  25
    

    如果您想更改日期列的格式,可以使用以下代码行。

    df['date'].astype(str)
    

    这会将整个列转换为对象。

    【讨论】:

    • 您好,但是如果数据太长怎么办,是否可以在不列出“数据”变量中的所有内容的情况下创建 df?
    • 我创建的这个“数据”字典作为示例显示并将其转换为数据帧,您已经将 xslx 文件读取到数据帧。您不需要创建数据变量。您可以从答案部分开始。
    【解决方案2】:

    第一个想法是使用to_datetime:

    df['AA'] = pd.to_datetime(df['AA'])
    

    如果需要在T 之后删除值,您的解决方案应更改为:

    df['AA'] = pd.to_datetime(df['AA'].str.split("T").str[0])
    

    【讨论】:

    • 但是在'T'之前分割字符串后日期结构保持不变。我希望它是“%d/%m/%Y”
    • @SyahmiShaarani - 不明白,2020-01-01 格式错误?
    • 我已将字符串拆分为这样。现在,我希望这一年在最后,而不是在前面。它必须是 '01-01-2020' 而不是 2020-01-01'
    • @SyahmiShaarani - 好的,所以使用 df['AA'] = pd.to_datetime(df['AA'].str.split("T").str[0]).dt.strftime('%d-%m-%Y') - 但它是字符串,而不是日期时间
    • @SyahmiShaarani - 如果需要日期时间,则无法自定义格式,日期时间始终为 python YYYY-MM-DD 格式
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2014-12-18
    • 2012-04-30
    • 2017-08-26
    相关资源
    最近更新 更多