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表示分钟),参考这里。
由于返回的是一个元组,所以获取其中某一个值时直接用类似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来获取想要的时间了,具体链接在这里
附代码:
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