日期處理相關內容之前`pandas基礎`系列中有一篇專門介紹過,本篇補充兩個常用的技巧。 # 1. 多列合併為日期 當收集來的數據中,年月日等信息分散在多個列時,往往需要先合併成日期類型,然後才能做分析處理。合併多列轉換為日期類型,可以直接用 `to_datetime`函數來處理: ```pytho ...
日期處理相關內容之前pandas基礎
系列中有一篇專門介紹過,本篇補充兩個常用的技巧。
1. 多列合併為日期
當收集來的數據中,年月日等信息分散在多個列時,往往需要先合併成日期類型,然後才能做分析處理。
合併多列轉換為日期類型,可以直接用 to_datetime
函數來處理:
import pandas as pd
df = pd.DataFrame(
{
"year": ["2021", "2021",
"2022", "2022", "2022"],
"month": ["1", "3", "4", "4", "6"],
"day": ["10", "20", "4", "4", "1"],
"value": [1, 2, 3, 4, 5],
}
)
df["date"] = pd.to_datetime(
df[["year", "month", "day"]]
)
df = df.drop(
columns=["year", "month", "day"]
)
df
2. 基於日期的聚合統計
之所以要把列類型轉換為日期類型,是因為pandas
提供了針對日期類型的非常便利的聚合統計方法。
比如如下連續的日期數據:
df = pd.DataFrame(
{
"year": ["2022", "2022", "2023",
"2023", "2023"],
"month": ["12", "12", "1", "1", "1"],
"day": ["30", "31", "1", "1", "2"],
"value": [1, 2, 3, 4, 5],
}
)
df["date"] = pd.to_datetime(
df[["year", "month", "day"]]
)
df = df.drop(
columns=["year", "month", "day"]
)
df = df.loc[:, ::-1]
df
這裡用了之前介紹過的一個小技巧 df.loc[:, ::-1]
,把date
列放在value
列之前,對數據處理沒有什麼影響,只是為了看數據的習慣。
得到轉換好的數據之後,可以通過resample
函數來聚合統計。resample
是pandas
提供的專門用於時間序列數據的聚合統計的。
2.1. 按年統計
ysum = df.resample("Y", on="date").value.sum()
ymean = df.resample("Y", on="date").value.mean()
stat = pd.DataFrame({
"sum": ysum,
"mean": ymean,
})
stat
示例數據只有兩年的,統計後顯示的是日期是年末最後一天。
這裡為了演示只統計了合計值和平均值,實際可以根據情況統計需要的值。
2.2. 按月統計
msum = df.resample("M", on="date").value.sum()
mmean = df.resample("M", on="date").value.mean()
stat = pd.DataFrame({
"sum": msum,
"mean": mmean,
})
stat
統計後顯示的日期是每個月月末的日期。
2.3. 按日統計
dsum = df.resample("D", on="date").value.sum()
dmean = df.resample("D", on="date").value.mean()
stat = pd.DataFrame({
"sum": dsum,
"mean": dmean,
})
stat
根據每天的日期統計。
2.4. 按季度統計
qsum = df.resample("Q", on="date").value.sum()
qmean = df.resample("Q", on="date").value.mean()
stat = pd.DataFrame({
"sum": qsum,
"mean": qmean,
})
stat
統計後顯示的日期是每個季度的最後一天。
2.5. 按周統計
wsum = df.resample("W", on="date").value.sum()
wmean = df.resample("W", on="date").value.mean()
stat = pd.DataFrame({
"sum": wsum,
"mean": wmean,
})
stat
統計後顯示的日期是每個周的周日。
2.6. 補充
resample
函數支持的統計期間除了上面介紹的常用的年,月,日,周,季度等等,還有很多其他的期間,
具體參考:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases