Pandas 有着強大的日期數據處理功能,主要包括以下三個方面:按日期篩選數據、按日期顯示數據、按日期統計數據
1、讀取數據
import pandas as pd
df = pd.read_csv('date.csv', header=None)
print(df.head(2))
>>>輸出結果:
0 1
0 2013-10-24 3
1 2013-10-25 4
2、整理數據
df.columns = ['date','number']
df['date'] = pd.to_datetime(df['date']) # 將數據類型轉換為日期類型
df = df.set_index('date') # 將date設置為index
print(type(df))
print(df.index)
print(type(df.index))
>>>輸出結果:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex(['2013-10-24', '2013-10-25', '2013-10-29', '2013-10-30',...'2017-02-14', '2017-02-22'],dtype='datetime64[ns]', name='date', length=425, freq=None)
<class 'pandas.tseries.index.DatetimeIndex'>
3、構造Serises
s = pd.Series(df['number'], index=df.index)
print(type(s))
s.head(2)
>>>輸出結果:
<class 'pandas.core.series.Series'>
date
2013-10-24 3
2013-10-25 4
Name: number, dtype: int64
4、按日期篩選數據
# 獲取某年的數據
print(df['2013'].head(2)) # 獲取2013年的數據
print(df['2016':'2017'].head(2)) # 獲取2016至2017年的數據
# 獲取某月的數據
print(df['2013-11']) # 獲取某月的數據
# 獲取某天的數據
print(s['2013-11-06'])
dataframe 的 truncate 函數可以獲取某個時期之前或之后的數據,或者某個時間區間的數據,但一般建議直接用切片(slice),這樣更為直觀,方便
print(df.truncate(after = '2013-11'))
5、按日期顯示數據
1)to_period() 方法
print(df.to_period('Q').head()) # 按季度顯示,但不統計
print(df.to_period('A').head()) # 按年度顯示,但不統計
2)asfreq() 方法
df_period.index.asfreq('A') # 按年度頻率顯示,'A'默認是'A-DEC',其他如'A-JAN'
df_period.index.asfreq('Q') # 按季度頻率顯示,'Q' 默認是'Q-DEC',其他如“Q-SEP”,“Q-FEB”
df_period.index.asfreq('M') # 按月度頻率顯示,按月份顯示
df_period.index.asfreq('B', how='start') # 按工作日顯示,按工作日期顯示
df_period.index.asfreq('B', how='end') # 按工作日顯示,按工作日期顯示
6、按日期統計數據
1)統計
print(df.resample('w').sum().head()) # 按周統計
print(df.resample('M').sum().head())
# ”MS”是每個月第一天為開始日期,”M”是每個月最后一天
print(df.resample('Q').sum().head())
# ”QS”是每個季度第一天為開始日期,”Q”是每個季度最后一天
print(df.resample('AS').sum())
# ”AS”是每年第一天為開始日期, ”A”是每年最后一天
2)顯示
print(df.resample('AS').sum().to_period('A'))
# 按年統計並顯示
print(df.resample('Q').sum().to_period('Q').head())
# 按季度統計並顯示
print(df.resample('M').sum().to_period('M').head())
# 按月度統計並顯示