python - 如何在具有不同日期格式的列上将字符串转换为日期

标签 python apache-spark datetime pyspark apache-spark-sql

我的Spark DataFrame中有一列open_date,其字符串类型值如下,这是两种不同的格式yyyymmddyyyymm

+---------+
|open_date|
+---------+
| 19500102| 
|   195001| 
+---------+


我的预期输出是

+----------+
| open_date|
+----------+
|1950-01-02|
|1950-01-01|
+----------+


我尝试使用pyspark.sql.functions.substrpyspark.sql.functions.splitpyspark.sql.functions.regex_extract将此字符串转换为日期格式。由于对这些知识的了解有限,他们都没有成功。

如何在不同格式的列上将字符串转换为日期类型?

最佳答案

您可以要求存在yyyymm,但是将dd设置为可选。将它们分成自己的捕获组,如果缺少filter,则将其分成dd,然后使用join分隔符将其分隔为'-'

>>> import re
>>> s = '19500102 195001'
>>> ['-'.join(filter(None, i)) for i in re.findall(r'(\d{4})(\d{2})(\d{2})?', s)]
['1950-01-02', '1950-01']

关于python - 如何在具有不同日期格式的列上将字符串转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337064/

相关文章:

python - 使用numpy中的一维数组从二维数组中选择多个元素

从列表创建字典的 Pythonic 方法,其中键是在另一个列表中找到的元素,值是键之间的元素

python - 将 Spark Dataframe 中的 float 列转换为 VectorUDT

apache-spark - 在Spark中禁用 Parquet 元数据摘要

python - 按行中非空元素的计数对 PySpark Dataframe 进行统一分区

python - 如何在 Python 中检测或防止同一模块的多个实例?

scala - Spark on AWS EMR : java. lang.NoSuchMethodError : scala. Product.$init$(Lscala/Product;)V

mysql - 如何从MySQL中的日期和时间范围获取数据

sql-server-2008 - SQL Server 2008 SYSDATETIME 返回错误的日期

c# - 您如何使用C#计算累计时间?