@
本文基本数据操作数据准备:
# 创建一个符合均匀分布的数据集(634,7)
import numpy as np
import pandas as pd
# 生成数据
data = np.random.uniform(-20,20, (634,7))
# 生成行索引
date = pd.date_range(start="20210601", periods=634, freq="B")
# 生成列索引
stock_name = ["open","high","close","low","volume","price_change","p_change"]
# 将数据加载到DataFrame中,并加上行列索引
data = pd.DataFrame(data, index = date, columns=stock_name)
data
下面展示部分生成数据
??pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
??Numpy当中我们已经讲过使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名称,甚至组合使用。
获取‘2021-06-04’这天的close的结果
# 注意先列后行
data["close"]["2021-06-04"]
# output
# -1.0426990669399316
若想要先行后列
获取"2021-06-01"至"2021-06-06",‘close’的数据
# 二者输出结果相同
data.loc["2021-06-04"]["close"]
data.loc["2021-06-04","close"]
# output
# -1.0426990669399316
# 使用iloc可直接使用数字索引
data.iloc[3,2]
# output
# -1.0426990669399316
# 组合索引
data.ix[:4,["open", "close", "high", "low"]]
组合索引输出:
但是这种组合版本在以后的版本中会被取消
DeprecationWarning:
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing
但是我们仍有办法使用组合索引:
# 使用loc来使用组合索引
data.loc[data.index[0:4],["open", "close", "high", "low"]]
# 使用iloc来使用组合索引
data.iloc[:4,data.columns.get_indexer(["open", "close", "high", "low"])]
返回结果与 ix 组合索引一样
例如:对DataFrame中的close列重新赋值为1
# 直接修改原来的值
new_data1 = data
new_data["close"] = 1
# 或者
new_data2 = data
new_data2.close = 1
new_data1.head(5)
new_data2.head(5)
返回结果:
排序有两种形式,一种是对内容进行排序,一种是对索引进行排序
DataFrame
# 按 p_change进行排序
data = data.sort_values(by="p_change", ascending=True)
# 先按 high 进行排序, 再按 p_change进行排序
data = data.sort_values(by=["high","p_change"])
# 使用sort_index进行排序,按照日期索引从大到小排序,或从小到大排序
data = data.sort_index()
# Series
# 使用series.sort_values(ascending=True) 对内容进行排序
# series排序时,只有一列,不需要参数
data["p_change"].sort_values(ascending=True).head(
# 2022-10-20 -19.919984
# 2022-05-11 -19.919346
# 2023-02-06 -19.912896
# 2021-07-21 -19.886578
# 2021-09-07 -19.876232
# Name: p_change, dtype: float64
# 使用series.sort_index() 对索引进行排序
data["p_change"].sort_index().head()
# 2021-06-01 16.871168
# 2021-06-02 8.089420
# 2021-06-03 -10.253883
# 2021-06-04 -3.903694
# 2021-06-07 16.020016
# Name: p_change, dtype: float64
??注意:以下的运算操作对于DataFrame与series都适用
# dataframe的加减乘除运算
# 加
data.add(10)
data + 10
# 减
data.sub(10)
data - 10
# 如果想要得到每天的涨跌大小?求出每天close - open价格差
# 1. 筛选两列数据
close = data.close
open = data.open
# 2. 收盘价减去开盘价
data[‘m_price_change‘] = close.sub(open)
data.head()
data["p_change"] > 2
# 输出
2021-06-01 True
2021-06-02 False
2021-06-03 True
2021-06-04 True
2021-06-07 True
2021-06-08 True
2021-06-09 False
2021-06-10 True
# 获取p_change 大于二 且 open 小于 12的 结果
(data["p_change"] > 2) & (data["open"] < 12)
# 利用布尔索引获取
data[(data["p_change"] > 2) & (data["open"] < 12)]
expr:查询字符串
data.query("p_change > 2 & open > 15" ).head()
输出:
data[data["open"].isin( [-10.243635090215308,-12.40666134379941])]
综合分析:能够直接得出很多统计结果,count、mean、stf、min、max、等
# 计算平均值、标准差、最大值、最小值
data.describe()
# 观察p_change的累加走势情况
data.p_change.sort_index().cumsum().plot()
func:自定义函数
axis=0:默认是列,axis=1为进行行运算
例如计算最大值最小值之差:
# 计算最大值最小值之差
data.apply(lambda x: x.max() -x.min(), )
DataFrame.plot (x=None, y=None, kind=‘line‘)
x : label or position,default None
y : label, position or list of label, positions, default None
kind : str
data.plot(x="volume", y= "open", kind="scatter")
??我们的数据大部分存在于文件当中,所以pandas会支持复杂的IO操作,pandas的Api支持众多的文件格式,如CSV、SQL、XLS、JSON、HDF5
??本文主要介绍了索引操作、复制与排序、DataFrame的运算和pandas画图。
十分钟Pandas快速入门--机器学习基础(python)(二)
原文:https://www.cnblogs.com/luminous-Xin/p/14863794.html