如何将一列数字转换为python

时间:2018-05-24 07:18:53

标签: python pandas dataframe

我的数据框包含一个日期列。它看起来像这样:

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     

1 个答案:

答案 0 :(得分:2)

我认为具有指定to_datetimeformat应该足够了:

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