pandas时序分析

本文介绍了如何在Python中使用Pandas进行日期时间处理,包括创建date_range、设置datetime索引、数据类型转换、时区处理、时间序列筛选、计算变化率和相关性,以及数据的重采样和移动平均操作。
摘要由CSDN通过智能技术生成

创建DatetimeIndex

date_range

daily_index = pd.date_range("2020-02-28", periods=4, freq="D")
weekly_index = pd.date_range("2020-01-01", "2020-01-31", freq="W-SUN")

pd.DataFrame(data=[21, 15, 33, 34],
             columns=["visitors"], index=weekly_index)

将数据类型修改为datatime

to_datatime()

msft.loc[:, "Date"] = pd.to_datetime(msft["Date"])

parse_dates 参数 

msft = pd.read_csv("csv/MSFT.csv",
                   index_col="Date", parse_dates=["Date"])
#index_col 表示:date列为索引
#parse_dates 表示: date列包含时间戳

其他数据类型的转换

astype()

msft.loc[:, "Volume"] = msft["Volume"].astype("float")
msft["Volume"].dtype

dtype={"Volume": float}

msft = pd.read_csv("csv/MSFT.csv",dtype={"Volume": float})

访问DatetimeIndex的部分属性

date,year,month,day

访问列时,使用dt属性。df["column_name"].dt.date

msft.index.date

筛选

msft.loc["2019", "Adj Close"]
msft.loc["2019-06":"2020-05", "Adj Close"].plot()

用鼠标在图上画矩形可以缩放,

双击返回默认视图

时区

msft_close = msft.loc[:, ["Adj Close"]].copy()
msft_close.index = msft_close.index + pd.DateOffset(hours=16)
msft_close.head(2)
msft_close = msft_close.tz_localize("America/New_York")
msft_close.head(2)

换为UTC时区

msft_close = msft_close.tz_convert("UTC")
msft_close.loc["2020-01-02", "Adj Close"]

变化率

returns = np.log(msft_close / msft_close.shift(1))
returns = returns.rename(columns={"Adj Close": "returns"})
returns.head()

#shift(), 正数表示上移对应行,负数表示下移对应行
#对数收益率:当前股价与之前股价之比的对数
returns.plot.hist()
#直方图

简单收益率:相对于前一行数据的百分比变化率

pct_change()

simple_rets = msft_close.pct_change()
simple_rets = simple_rets.rename(columns={"Adj Close": "simple rets"})
simple_rets.head()

合并多个csv文件

parts = []  
for ticker in ["AAPL", "AMZN", "GOOGL", "MSFT"]:
   #usecols只读取date列和adj close列
    adj_close = pd.read_csv(f"csv/{ticker}.csv",
                            index_col="Date", parse_dates=["Date"],
                            usecols=["Date", "Adj Close"])
  
    adj_close = adj_close.rename(columns={"Adj Close": ticker})
   
    parts.append(adj_close)

adj_close = pd.concat(parts, axis=1)
adj_close
adj_close = adj_close.dropna()
adj_close.info()

使时序从100开始

使第一行的所有数据都为0,其余行按比率发生变化

adj_close_sample = adj_close.loc["2019-06":"2020-05", :]
rebased_prices = adj_close_sample / adj_close_sample.iloc[0, :] * 100
rebased_prices.head(2)

计算相关性

corr()

returns = np.log(adj_close / adj_close.shift(1))
returns.corr()

相关性热点图

fig = px.imshow(returns.corr(),
                x=adj_close.columns,
                y=adj_close.columns,
                color_continuous_scale=list(
                    reversed(px.colors.sequential.RdBu)),
                zmin=-1, zmax=1)
fig.show()

重新采样

向下采样:将时序频率降低;

向上采样:将时序频率提高;

resample()

M 日历月底

BM 经营月底

end_of_month = adj_close.resample("M").last()
end_of_month.head()

sum,mean,ohlc

ohlc,开盘价、最高价、最低价和收盘价

向上采样

end_of_month.resample("D").asfreq().head() 
#asfreq 没有转换
nd_of_month.resample("W-FRI").ffill().head() 
#ffill 向上填充

滚动窗口,移动平均值

count、sum、median、min、max、std(标准差)和var(方差)

rolling()

msft19 = msft.loc["2019", ["Adj Close"]].copy()

msft19.loc[:, "25day average"] = msft19["Adj Close"].rolling(25).mean()
msft19.plot()

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值