我的数据框具有字符串格式的日期,如下所示:
day_date
8/28/2020
9/21/2019
11/21/2020
12/12/2019
我想以某种方式格式化此列,如果它与模式2020-11-25 04:02:08匹配,则它应格式化为yyyy-mm-dd(2020-11-25),如果其格式为11/25 / 2020 02:04:08,然后mm / dd / yyyyy(11/25/2020)
我一直用来实现这一目标的代码是:
new_df = df.withColumn("new_date", when (df['day_date'].rlike('\d{1,2}/\d{1,2}/\d{4}\s*[\d:]*'),date_format('day_date','mm/dd/yyyy')) \
.when (df['day_date'].rlike('\d{4}-\d{1,2}-\d{1,2}\s*[\d:]*'),date_format('day_date','yyyy-mm-dd')) \
.otherwise(lit(None)))
但是在执行时,仅获取Null。
还有其他方法可以做到这一点吗?
注意:数据可能包含也可能不包含时间信息。
new_df = df.withColumn("new_date",
F.when(
F.to_timestamp('day_date','MM/dd/yyyy HH:mm:ss').isNotNull(),
F.date_format(
F.to_timestamp('day_date','MM/dd/yyyy HH:mm:ss'),
'MM/dd/yyyy'
)
).when(
F.to_timestamp('day_date','yyyy-MM-dd HH:mm:ss').isNotNull(),
F.date_format(
F.to_timestamp('day_date','yyyy-MM-dd HH:mm:ss'),
'yyyy-MM-dd'
)
).when(
(F.to_date('day_date','yyyy-MM-dd').isNotNull() |
F.to_date('day_date','MM/dd/yyyy').isNotNull()),
F.col('day_date')
)
)
# Example data:
+-------------------+----------+
| day_date| new_date|
+-------------------+----------+
|2020-11-25 04:02:08|2020-11-25|
|11/25/2020 02:04:08|11/25/2020|
| 11/21/2020|11/21/2020|
+-------------------+----------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句