我有一个数据框,想要拆分start_date
列(字符串和年份)并在新列中保留年份(第4列):
ID start_date End_date start_year
|01874938| August 2013| December 2014| 2013|
|00798252| March 2009| May 2015| 2009|
|02202785| July 2, 2014|January 15, 2016| 2, |
|01646125| November 2012| November 2015| 2012|
如你所见,我可以分割日期并保留年份。但是对于第3行中的日期:“2014年7月2日”,结果是“2”,而不是2014年。
这是我的代码:
split_col = fn.split(df7_ct_map['start_date'] , ' ')
df = df7_ct_map.withColumn('NAME1', split_col.getItem(0))
df = dff.withColumn('start_year', split_col.getItem(1))
答案 0 :(得分:2)
您可以使用正则表达式而不是,
上的分割。
df.withColumn('start_year', regexp_extract(df['start_date'], '\\d{4}', 0))
这将匹配4个连续数字,即一年。
答案 1 :(得分:2)
您还可以提取列start_date
的最后4个字符。
from pyspark.sql import functions as F
df.withColumn('start_year' ,
F.expr('substring(rtrim(start_date), length(start_date) - 4,length(start_date) )' ) )
.show()
+-------------+----------+
| start_date|start_year|
+-------------+----------+
| August 2013| 2013|
| March 2009| 2009|
| July 2, 2014| 2014|
|November 2014| 2014|
+-------------+----------+