【问题标题】:How to convert column values present in date/custom/general formats in a PySpark/Pandas dataframe into a Date Format?如何将 PySpark/Pandas 数据框中的日期/自定义/通用格式的列值转换为日期格式?
【发布时间】:2021-12-24 18:24:30
【问题描述】:

我有一个数据框,其中有一列包含以多种格式显示的日期值(在 Excel 中显示为自定义/常规/日期),就像您在下面的“之前”列中看到的那样:

它们最初都是日期值,但在我得到的输入 CSV 文件中的某个地方被修改为不同的格式。

我的目标是将值转换为您可以在“之后”列中看到的“DD/MM/YYYY”格式。

我将其作为 Pandas/Spark 数据框阅读,因为在必须对其进行更改的列中有数千个这样的值。

我尝试执行以下操作,但没有生成我需要的正确“DD/MM/YYYY”格式。此外,一些值也保持不变:

df['After'] = pd.to_datetime(df['Before'], format='%d-%m-%y, errors='coerce')

任何人都可以帮忙解决这个问题吗?

干杯!

【问题讨论】:

    标签: python pandas dataframe pyspark apache-spark-sql


    【解决方案1】:

    这是我的尝试:

    df = pd.read_excel('test.xls')
    
    df['ADATE'] = pd.to_datetime(pd.to_numeric(df['A'],errors='coerce'), unit='D', origin='1899-12-30').fillna(pd.to_datetime(df['A'],errors='coerce'))
    
    
    print(df)
    

    输出(如何读取最后一行???)

                 A                   ADATE
    0    43746.39028 2019-10-08 09:22:00.192
    1          43735 2019-09-27 00:00:00.000
    2  1/1/2021 0:00 2021-01-01 00:00:00.000
    3        50:11.0                     NaT
    

    编辑

    使用 ".dt.strftime('%d/%m/%Y')" 您可以使用所需的格式,记住这会改变类型。

    df['ADATE'] = pd.to_datetime(pd.to_numeric(df['A'],errors='coerce'), unit='D', origin='1899-12-30').fillna(pd.to_datetime(df['A'],errors='coerce')).dt.strftime('%d/%m/%Y')
    

    【讨论】:

    • 这可以很好地将所有值转换为统一格式。但是,我需要对这种格式稍作调整。我们可以完全像这样吗? 27/09/2019
    • 日期必须是 DD/MM/YYYY 格式。并且可以消除时间值。
    • 是的,但这会使该列再次包含字符串。只需将“.dt.strftime('%d/%m/%Y')”添加到第二个代码行。像这样:df['ADATE'] = pd.to_datetime(pd.to_numeric(df['A'],errors='coerce'), unit='D', origin='1899-12-30').fillna (pd.to_datetime(df['A'],errors='coerce')).dt.strftime('%d/%m/%Y')
    • 这行得通!得到了我想要的格式。您可能想要在您提供的主要答案中编辑并添加“.dt.strftime('%d/%m/%Y')”。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2014-02-25
    • 2020-08-04
    相关资源
    最近更新 更多