一、认识Pandas数据分析库
1.1 数据结构:Series,DataFrame
区别:
- series,只是一个一维数据结构,它由index和value组成
- dataframe,是一个二维结构,除了拥有index和value外,还拥有column
联系:
dataframe 由多个series组成,无论是行还是列,单独拆分出来都是一个series
# 创建一张二维表格
data = {'apples': [3, 2, 0, 1], 'oranges': [0, 3, 7, 2]}
data = pd.DataFrame(data)
print(data)
# series调序
app = data['apples']
app = pd.Series(app,index=[3,2,1,0])
print(app)
# 重置索引 参数drop删除索引
app = app.reset_index(drop=True)
print(app)
1.2 Numpy和Pandas
两者互相转换
# series转换为DataFrame columns添加列名
data2 = np.arange(15).reshape(3,5)
data2 = pd.DataFrame(data2,columns=['a','b','c','d','e'])
print(data2)
# series转换为DataFrame columns添加列名
data2 = np.arange(15).reshape(3,5)
data2 = pd.DataFrame(data2,columns=['a','b','c','d','e'])
print(data2)
# DataFrame转换为Series
data3 = pd.DataFrame(data2,columns=['a','b','c','d','e'])
print(data3.values)
二、DataFrame的基本操作
# 创建一个时间列表 30行数据 按月
dates = pd.date_range('20220101', periods=30, freq='M')
# np.random生成0-1数据 30行3列 列名A,B,C 索引是dates
data = pd.DataFrame(np.random.rand(30, 3), columns=list('ABC'), index=dates)
2.1 查看头部、尾部数据
data.head()
# 查看前三行
data.head(3)
# 查看尾部数据
data.tail()
# 查看尾部5行
data.tail(5)
2.2 查看索引列名
# 索引
data.index
#列名
data.columns
2.3 查看数值
# 查看数值
data.values
data.to_numpy
2.4 查看统计摘要
# 查看统计摘要
data.describe()
2.5 查看列数据
# 查看列数据
data['A']
# 查看两列数据
data[['A','B']]
2.6 查看行数据
# 查看前10行数据
data.iloc[0:10]
# 筛选索引
data.loc['20220101':'20221001']
# 只看 20220101 - 20221001 A,B列 行和列同时进行筛选
data.loc['20220101':'20221001','A':'B']
2.7 按值筛选
# 先将结果保留2位小数
data = round(data,2)
# 按值筛选 可写> < =
data[data['A']==0.95]
# 只看A列
data[data['A']==0.95]['A']
2.8 去缺失值
# 去缺失值
data.dropna()
2.9 去重复值
# 去重复值
data.drop_duplicates()
2.10 转置、排序
# 转置
data.T
# 按值排序 逆序
data.sort_values(by='A',ascending=False)
# 按index排序 逆序
data.sort_index(ascending=False)
三、时间序列和Resample函数
3.1 时间序列
- index横坐标为日期数据
- 数据导入:pandas datareader
3.2 Resample函数
计数、均值、方差、累加、累乘
周期转换
数据验证 :for 循环 vs 内置函数
import pandas_datareader as pdr
# 获取数据 近10年债券
date_d = pdr.get_data_fred('GS10')
print(date_d)
# 计算:均值,方差,最大值,最小值,计数等常见的描述性指标
# 计算均值 按月
print(date_d.resample(rule='M').mean())
count = date_d.resample(rule='Y').count()
print(count)
# 累加
sum1 = date_d.resample(rule='Y').sum()
print(sum1)
# 计算标准差 获取最大值
data = date_d.resample(rule='Y').std().max()
# 计算累乘
data1 = date_d.resample(rule='Y').prod()
# 获取数据 近5年债券
date_d5 = pdr.get_data_fred('GS5')
# 合并5年和10年数据 值和index的精确匹配
date_d['GS5'] = date_d5
print(date_d)
# 增加一列mean 计算5年和10年平均数
date_d['mean'] = (date_d['GS10'] + date_d5['GS5']) / 2
print(date_d)
# 周期转换 每一年最后的的数据
date_d.resample(rule='Y').last()
三、plot快速可视化
# 生成1000数值 0-1小数
df = np.random.randn(1000)
df = pd.DataFrame(df,index=pd.date_range('20200101',periods=1000))
# 绘制图形
df.plot()
四、io读取与存储:csv、excel
4.1 读取和存储
# 数据存储
data = pd.DataFrame(np.random.randn(1000,3),columns=['a','b','c'],index=pd.date_range('20200101',periods=1000))
# 存储前对索引命名
data.index.names = ['data']
data.to_csv('txt.csv')
# 对已有文件进行数据追加
data2 = data.tail()
data2.to_csv('txt.csv',mode='a',header=False) # append - 追加操作 header=False不写入表头
# 读取
df = pd.read_csv('txt.csv')
print(df)
# excel读取 新建工作表名称
data.to_excel('txt.xlsx',sheet_name='b') # 没有mode参数
# 一次写入多个sheet ,追加新的sheet
with pd.ExcelWriter('writer.xlsx') as writer:
data.to_excel(writer,sheet_name='a')
data.to_excel(writer,sheet_name='b')
data.to_excel(writer,sheet_name='c')