pandas在从外部文件读取数据时,会把文件中日期格式数据的类型识别为object
其中的“Earthquake_Time”被识别为object,这样再后面做时间纬度上的分析会比较麻烦,所以需要将该字段类型转成日期类型。
# 方法一:通过 parse_dates 参数直接将某些列转换成 datetime64 类型
columns = ['Earthquake_Time', 'Magnitude', 'Latitude', 'Longitude', 'Depth', 'Earthquake_Location'] # 设置表头
df = pd.read_excel('E:\\data\\eqList2020_02_18.xlsx', header=None, names=columns, skiprows=1,parse_dates=['Earthquake_Time']) # 打开表格
print(df.info())
"""
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Earthquake_Time 7617 non-null datetime64[ns]
1 Magnitude 7617 non-null float64
2 Latitude 7617 non-null float64
3 Longitude 7617 non-null float64
4 Depth 7617 non-null float64
5 Earthquake_Location 7617 non-null object
"""
# 方法二:使用Python的datetime进行转换,可能有些方法不带parse_dates 参数
import pandas as pd
from datetime import datetime
pd.set_option('max_columns', 20)
columns = ['Earthquake_Time', 'Magnitude', 'Latitude', 'Longitude', 'Depth', 'Earthquake_Location'] # 设置表头
df = pd.read_excel('E:\\data\\eqList2020_02_18.xlsx', header=None, names=columns, skiprows=1) # 打开表格
df['Earthquake_Time'] = df['Earthquake_Time'].apply(lambda x :datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
print(df.info())
"""
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Earthquake_Time 7617 non-null datetime64[ns]
1 Magnitude 7617 non-null float64
2 Latitude 7617 non-null float64
3 Longitude 7617 non-null float64
4 Depth 7617 non-null float64
5 Earthquake_Location 7617 non-null object
"""
转换成日期类型之后,便可以进行一些日期转换,满足分析需求:
# 这里使用Pandas.Series.dt方法来提取不同的时间维度
Pandas.Series.dt.hour #取小时
Pandas.Series.dt.minute #取分钟
Pandas.Series.dt.second #取秒
Pandas.Series.dt.year #取年
Pandas.Series.dt.month #取月
Pandas.Series.dt.day #取天
Pandas.Series.dt.quarter #取季度
Pandas.Series.dt.time #取时间
Pandas.Series.dt.date #取日期
df['date'] = df['Earthquake_Time'].dt.date
Pandas.Series.dt.strftime('%y-%m-%d %h:%m:%s') #此处可灵活变动,根据需求来变动。
df['ym'] = df['Earthquake_Time'].dt.strftime('%Y-%m')
Pandas.Series.dt.weekday #返回周几,星期一是0,星期天是6
df['weekday'] = df['Earthquake_Time'].dt.weekday
Pandas.Series.dt.week #返回周数
Pandas.Series.dt.weekofyear #计算一年当中的第几周
Pandas.Series.dt.dayofyear #计算是一年当中的第几天