python转换时间格式提取时间信息

最近处理数据时需要从csv的时间单元格中分别提取此日期的星期几小时分钟等信息,整理了两种思路,记录一下。

  • 使用time库中的time.strptime
  • 使用pandas库中的pd.to_datetime

1、使用time库中的time.strptime
strptime可以根据指定的格式把一个时间字符串解析为时间元组。

  • 语法:time.strptime(string[, format])
  • 输入:string,时间格式的字符串,形如:2019/1/28 0:00:04
  • 返回:一个时间元组,format的格式要与输入的string严格一直,否则会报错 ValueError: time data ‘XXXX’ does not match format ‘XXXX’
    形如上面的输入,就应该将format写为"%Y/%m/%d %H:%M:%S",关于format中的各个时间日期的格式化符号(比如%M表示分钟),参考这里
    python转换时间格式提取时间信息

由于返回的是一个元组,所以获取其中某一个值时直接用类似struct_time.tm_mday的方式即可

因为是对大量数据进行处理,我加了一个循环,代码如下(不过数据量特别大的时候就运行的太慢了):

import time
import pandas as pd
file = pd.read_csv("A.csv")
df = pd.DataFrame(file, columns=["time", "day", "hour", "min"])#新加日、时、分列
#为新的列分别赋值
for index, row in df.iterrows():
	struct_time = time.strptime(row["time"], "%Y/%m/%d  %H:%M:%S")
	df.loc[index, "day"] = struct_time.tm_mday
    df.loc[index, "hour"] = struct_time.tm_hour
    df.loc[index, "min"] = struct_time.tm_min

2、使用pandas库中的pd.to_datetime
不同于第一种方法,pandas库的to_datetime可以直接对列操作

  • 语法:pd.to_datatime(string[, format])
  • 输入:string,时间格式的字符串,形如:2019/1/28 0:00:04
  • 返回:format指定时间处理的形式,如指定为format=’%Y%m%d’的格式输出

对时间格式进行转换后,就可以使用Series.dt来获取想要的时间了,具体链接在这里
python转换时间格式提取时间信息

附代码:

import pandas as pd
# 导入20190101的文件
train1_df = pd.read_csv(r"H:\Metro_train\record_2019-01-01.csv")
# 将时间对应的列转换为pandas可以处理的类型
train1_df['time'] = pd.to_datetime(train1_df['time'])
# 得到对应的周次、小时和分钟
train1_df['weekday'] = train1_df['time'].dt.weekday
train1_df['hour'] = train1_df['time'].dt.hour
train1_df['minute'] = train1_df['time'].dt.minute