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 #計算是一年當中的第幾天