我的数据框包含一个日期列。它看起来像这样:
Index Date
0 12018
1 102018
2 32018
3 122018
4 112019
5 32019
6 42019
最后四个数字显示年份和第一个(两个)月份。 我想将列更改为:
- 01-01-2018
- 01-01-2018
- 01-10-2018
- 01-03-2018
...
甚至更好的日期时间格式。
我尝试过这个功能,显示:
TypeError:只能将列表(不是“str”)连接到列表
def adjust_date(dataset_in, col_name):
day = "01"
for col in col_name:
if len(col_name)>5:
month = col_name[0:1]
year = col_name[2:5]
else:
month = col_name[0]
year = col_name[1:4]
result = year + "-" + month + "-" + day
return result
答案 0 :(得分:2)
我认为具有指定to_datetime
的format应该足够了:
df['Date'] = pd.to_datetime(df['Date'], format='%m%Y')
print (df)
Index Date
0 0 2018-01-01
1 1 2018-10-01
2 2 2018-03-01
3 3 2018-12-01
4 4 2019-11-01
5 5 2019-03-01
6 6 2019-04-01
print (df.dtypes)
Index int64
Date datetime64[ns]
dtype: object
感谢@Vivek Kalyanarangan提供解决方案 - 为自定义string
格式添加strftime
(但丢失了日期时间):
df['Date'] = pd.to_datetime(df['Date'], format='%m%Y').dt.strftime('%d-%m-%Y')
print (df)
Index Date
0 0 01-01-2018
1 1 01-10-2018
2 2 01-03-2018
3 3 01-12-2018
4 4 01-11-2019
5 5 01-03-2019
6 6 01-04-2019
print (df.dtypes)
Index int64
Date object
dtype: object
print (df['Date'].apply(type))
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
3 <class 'str'>
4 <class 'str'>
5 <class 'str'>
6 <class 'str'>
Name: Date, dtype: object