如何在Python中将日期变量转换为“int”?

时间:2018-03-12 01:34:15

标签: python-3.x type-conversion normalization prediction

我正在处理回归问题,数据显示为三列的csv文件,其中第二列包含日期,我想转换日期(格式:1/1/2015 12:00:00)到一个int(112015120000),以便能够规范化并应用我的模型。 我继续这样做:

data_set = pd.read_csv('train.csv')
date = data_set['Date'] # Dates represent the header of the dates' column
dates = date.values
date1 = [date.replace("-","") for date in dates ]
date2 = [date.replace(":","") for date in date1 ]
date_train = [date.replace(" ","") for date in date2 ]

但是我觉得它耗费时间和效率很低,有没有更短的方法呢?否则,是否可以直接在日期时间类型上应用标准化?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

df['date_new'] = df['date'].str.replace('\D', '').astype(int)

<强>解释

1. '\D'''替换所有非数字字符。
2.最后,我们将结果字符串转换为astype的整数。

这是一个虚拟的例子:

df = pd.DataFrame({'date' : pd.date_range('10/1/2018', periods=10, freq='H')})
df['date'] = df['date'].astype(str)
df['new_date'] = df['date'].str.replace('\D', '').astype(int)

    date                    new_date
0   2018-10-01 00:00:00     20181001000000
1   2018-10-01 01:00:00     20181001010000
2   2018-10-01 02:00:00     20181001020000
3   2018-10-01 03:00:00     20181001030000
4   2018-10-01 04:00:00     20181001040000
5   2018-10-01 05:00:00     20181001050000
6   2018-10-01 06:00:00     20181001060000
7   2018-10-01 07:00:00     20181001070000
8   2018-10-01 08:00:00     20181001080000
9   2018-10-01 09:00:00     20181001090000

答案 1 :(得分:0)

我建议转换为unix时间戳而不是int,它更清晰,更普遍接受

import time 
timestamp = time.mktime(time.strptime('1/1/2015 12:00:00', '%d/%m/%Y %H:%M:%S'))

结果是一个时间戳,可以很容易地转换为int。所有主要语言都支持使用时间戳来回转换。

答案 2 :(得分:0)

使用正则表达式(重新)。用空白替换所有非数字0到9。

import re
d = '1/1/20015 12:00:00'
new = re.sub('[^0-9]', '', str(d))
print(int(new))

Result: 20150101120000