python数据科学(五):pandas基础—— 时间序列类别索引透视
数据科学(五)
索引
tag = [‘a’] + [‘b’] + [‘c’]
x[‘Tag’] = tag
y = x[x.Tag.isin([‘a’,‘b’])]
重新索引reindex
df.reindex(index=dates[0:4],columns=list(df.columns) + [‘e’])
索引转换
-
stack()
stacked = df.stack() -
unstack()
转换回来
reversestacked = stacked.unstack()
在行索引有两层列索引有一层时,将行索引二层索引转换为列索引
reversestacked = stacked.unstack().unstack()
数据透视 pivot_table
- 不存在值——NaN
- 多个值——求平均值
pd.pivot_table(df, values=‘D’, index=[‘A’, ‘B’], columns=[‘C’])
行索引为AB 列索引为C
时间序列
创建
date_range
rng = pd.date_range(‘20200210’, periods=600, freq=‘s’)
period_range
季度为单位
prng = pd.period_range(‘1990Q1’, ‘2000Q4’, freq=‘Q-NOV’)
转换成时间日期
prng.to_timestamp()
运算
-
减
deltime=pd.Timestamp(‘20200110’)-pd.Timestamp(‘20200210’) -
加
sumtime = pd.Timestamp(‘20200210’)+pd.Timedelta(days=5)
类别数据category
添加categories数据
df[“grade”] = df[“raw_grade”].astype(“category”)
查看类别
df.grade.cat.categories
重命名
rename = df[“grade”].cat.categories = [“11”, “22”, “33”]
排序
-
升序
sortct=df.sort_values(by=‘grade’, ascending=True) -
降序
sortct=df.sort_values(by=‘grade’, ascending=False)
数据可视化
表格.plot()
数据读写csv
- 读
表格.to_csv(‘data.csv’) - 写
pd.read_csv(‘data.csv’, index_col=0)
代码
import pandas as pd
import numpy as np
#索引
#索引转换
#索引
dates = pd.date_range('20200208',periods=3)
s = pd.DataFrame(np.random.randn(3,4),index=dates,columns=list('abcd'))
x = s[s>0]
print('索引比较')
print(x)
x = s.copy()
tag = ['a'] + ['b'] + ['c']
x['Tag'] = tag
print('复制后查找')
print(x)
y = x[x.Tag.isin(['a','b'])]
print(y)
dates = pd.date_range('20200209',periods = 6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('abcd'))
df1 = df.reindex(index=dates[0:4],columns=list(df.columns) + ['e'])
print('重新索引')
print(df1)
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two',
'one', 'two', 'one', 'two']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
print(df)
#此时有三层索引
stacked = df.stack()
print('索引转换')
print(stacked)
print(stacked.index)
##转换回来
reversestacked = stacked.unstack()
print(reversestacked)
reversestacked = stacked.unstack().unstack()
print(reversestacked)
#数据透视
df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,
'B' : ['A', 'B', 'C'] * 4,
'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
'D' : np.random.randn(12),
'E' : np.random.randn(12)})
print(df)
#行索引为AB 列索引为C NaN代表不存在 多个求平均值
print('数据透视')
print(pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C']))
#时间序列
#创建
##1
rng = pd.date_range('20200210', periods=600, freq='s')
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
print('时间序列')
print('创建')
print(ts)
##采样2分钟 用作求和 how=‘mean’
print(ts.resample('2Min', how='sum'))
##2
#季度为单位
prng = pd.period_range('1990Q1', '2000Q4', freq='Q-NOV')
print(prng)
#转换成时间日期
print('转换日期')
print(prng.to_timestamp())
#运算
deltime=pd.Timestamp('20200110')-pd.Timestamp('20200210')
print('运算')
print(deltime)
sumtime = pd.Timestamp('20200210')+pd.Timedelta(days=5)
print(sumtime)
#类别数据
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
###添加categories数据
df["grade"] = df["raw_grade"].astype("category")
print('类别数据')
print('添加')
print(df)
print(df.grade)
##查看类别
print(df.grade.cat.categories)
print('查看')
##重命名
rename = df["grade"].cat.categories = ["11", "22", "33"]
print('重命名')
print(rename)
##排序
sortct=df.sort_values(by='grade', ascending=True)
print('排序')
print(sortct)
sortct=df.sort_values(by='grade', ascending=False)
print(sortct)
#数据可视化
ts = pd.Series(np.random.randn(1000), index=pd.date_range('20200101', periods=1000))
ts = ts.cumsum()
print(ts)
ts.plot()
#数据读写csv
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))
print('读写csv')
df.to_csv('data.csv')
print(pd.read_csv('data.csv', index_col=0))
数据透视
时间序列
类别数据
读取