举个例子,我试图将一个字段’date’切成YYYYMMDD格式的日期,分为3个单独的字段(‘year’,’month’,’day’).
我有一种方法,一次分配一个值,但我认为有一种更有效的方法来产生所需的结果.
当前解决方案
df['year'] = df['date'].astype(str).apply(lambda x: x[:4])
df['month'] = df['date'].astype(str).apply(lambda x: x[4:6])
df['day'] = df['date'].astype(str).apply(lambda x: x[6:8])
以下是我尝试简化代码的一个示例:
df['year'], df['month'], df['day'] = df['date'].astype(str).apply(lambda x: [x[:4], x[4:6], x[6:8]])
最佳答案 假设列日期是字符串(对象)dtype:
In [18]: df
Out[18]:
date
0 20180131
1 20180611
2 20180513
In [19]: df.dtypes
Out[19]:
date object
dtype: object
解:
In [22]: df[['year','month','day']] = df.date.str.extract(r'(\d{4})(\d{2})(\d{2})').astype(int)
In [23]: df
Out[23]:
date year month day
0 20180131 2018 1 31
1 20180611 2018 6 11
2 20180513 2018 5 13
In [24]: df.dtypes
Out[24]:
date object
year int32
month int32
day int32
dtype: object
PS如果日期是数字dtype,那么我选择@ ALollz的解决方案……