一、Matplotlib基本要点
1. matplotlib折线图(统计数量的增减变化)
from matplotlib import pyplot as plt # 导入pyplot
X = range(2,26,2) # 数据在x轴的位置,是一个可迭代的对象
Y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
# 数据在y轴的位置,是一个可迭代的对象
# x轴和y轴的数据一起组成了所有要绘制出的坐标。分别是(2,15),(4,13),(6,15),(8,17)等
plt.plot(x,y) # 传入x和y,通过plot绘制出折线图
plt.show() #在执行程序的时候展示图形
一个图表内写入两个折线图:
plt.plot(x,y) # 一行写入两个
WE CAN DO MORE
- 设置图片大小(想要一个高清无码大图)
- 保存到本地
- 描述信息,比如x轴和y轴表示什么,这个图表示什么
- 调整x或者y的刻度间距
- 线条的样式(比如颜色,透明度等)
- 标记出特殊的点(比如告诉别人最高点和最低点在哪里)
- 给图片添加一个水印(防伪,防止盗用)
1.1设置图片大小
import matplotlib.pyplot as plt
Fig = plt.figure(figsize=(20,8),dpi=80)
# figure图形图标的意思,这里指我们画的图
# 通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
# 在图像模糊的时候可以传dpi参数,让图片更清晰
x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.savefig(‘./t1.svg’) # 保存图片 可以保存为svg这种矢量图格式,放大不会有锯齿
plt.show()
2.1保存到本地
plt.savefig(‘./t1.svg’) # 保存图片
# 可以保存为**svg这种矢量图格式**,放大不会有锯齿
3.1添加描述信息
plt.xlabel(‘’) # x轴的描述信息
Plt.ylabel(‘’) # y轴的描述信息
Plt.title(‘’) # 图表的描述信息
plt.legend(prop=my_font,loc=‘位置’) # 图表中如果有多个折线图,添加标注每个折线图的title(图例)
位置有多个参数(传入字符串或者数字都可):
- best:0
- upper right:1
- upper lef:2
- lower left:3
- lower right:4
- right:5
- center left:6
- center right:7
- lower center:8
- upper center:9
- center:10
matpoltlib默认不能显示中文,使用中文的办法
from matplotlib import font_manager
my_fount = font_manager.FontProperties(fname=‘C:/Windows/Fonts/simsun.ttc’)
plt.xticks(_xtick_labels[::2],fontproperties=my_font)
4.1调整X或者Y轴上的刻度
_xtick_labels = [i/2 for i in range(4,49)]
plt.xticks(_xtick_labels) # 设置x轴的刻度
plt.xticks(_xtick_labels[::2])
# 当刻度太密集的时候使用列表的步长(切片)来间隔取值解决,matplotlib会自动对应
plt.yticks(range(min(y),max(y)))
plt.show()
5.1线条的样式(比如颜色,透明度等)
# 设置图表中折线图的颜色、线条风格、线条粗细、透明度
plt.plot(x,y,color=‘颜色’,linestyle=‘:或-’,linewidth=5,alpha=0.5)
6.1标记出特殊的点(比如告诉别人最高点和最低点在哪里)
plt.grid(alpha=0.4) # 图表内部出现网格,参数alpha=0.4(设置网格透明度)
2.matplotlib散点图(统计离群点的分布规律)
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(x,y) # 绘制散点图
plt.show()
matplotlib直方图(统计连续型数据的分布情况)
plt.hist(a,20)
plt.show() # 绘制直方图
一般来说:能够使用plt.hist方法的是那些没有统计过的数据。因为使用不了hist的方法,hist是根据统计前的原数据进行分组的。
matplotlib条形图(统计离散型各数据的数量)
plt.bar(range(len(a)),b) # 绘制条形图
plt.xtickes(range(len(a)),a)
plt.show()
plt.barh() # 绘制条形图
matplotlib常见问题总结
应选择哪种图形来呈现数据
Matplotlib.plot(x,y)
Matplotlib.bar(x,y)
Matplotlib.scatter(x,y)
Matplotlib.hist(data,bins.normed)
xticks和yticks
label和title.grid的设置
绘图的大小和保存图片
matplotlib使用的流程总结
明确问题
选择图形的呈现方式
准备数据
绘图和图形完善
二、Numpy
1.数组的形状
a.shape(x,y) # 查看数组的形状,x为行数y为列数
a.reshape(x,y) # 设置成二维数组的形状,x为行数y为列数
a.reshape(a,b,c) # 设置成三维数组的形状,a为有几块b为行数c为列数
a.flatten() # 将二维数组展开成一维数组
2. 数组的计算
两个数组相加:对应位置上的数据相加
两个数组相减:对应位置上的数据相减
两个数组相乘:对应位置上的数据相乘
两个数组相除:对应位置上的数据相除
广播原则
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失或长度为1的维度上进行
行上数据数量是一样的就可以进行计算!!!
3. 为什么要学习numpy
- 快速
- 方便
- 科学计算的基础库
4. 什么是numpy
一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于在大型、多维数组上执行数值运算
5. numpy创建数组(矩阵)
import numpy as np # 创建数组
A = np.array([1,2,3,4,5])
B = np.array(range(1,6))
C = np.arange(1,6)
# 上面a,b,c内容相同,注意arange和range的区别
arange([start,stop[,step,]],dtype=None) # np.arange用法
6. numpy中常见的更多数据类型
类型 | 类型代码 | 说明 |
---|---|---|
int8、unit8 | i1、u1 | 有符号和无符号的8位(1个字节)整型 |
int16、unit16 | i2、u2 | 有符号和无符号的16位(2个字节)整型 |
int32、unit32 | i4、u4 | 有符号和无符号的32位(4个字节)整型 |
int64、unit64 | i8、u8 | 有符号和无符号的64位(8个字节)整型 |
float16 | f2 | 半精度浮点数 |
float32 | f4或f | 标准的单精度浮点数。与C的float兼容 |
float64 | f8或d | 标准的双精度浮点数。与C的double和python的float对象兼容 |
float128 | f16或g | 扩展精度浮点数 |
complex64、complex128、complex256 | c8、c16、c32 | 分别用两个32位、64位或128位浮点数表示的复数 |
bool | ? | 存储True和False值的布尔类型 |
np.array([],dtype=类型代码) # 创建数组的数据类型
a.astype(类型代码) # 修改数组的数据类型
np.round(b,2) # 修改浮点型的小数位数
7. 轴(axis)
在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2,3)),有0,1,2轴
8. numpy读取数据
参数 | 解释 |
---|---|
frame | 文件、字符串或产生器,可以使 .gz 或 bz2 压缩文件 |
dtype | 数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认 np.float |
delimiter | 分隔字符串,默认是任何空格,改为逗号 |
skiprows | 跳过前x行,一般跳过第一行表头 |
usecols | 读取指定的列、索引,元组类型 |
unpacks | 如果True,读入属性将分别写入不同数组变量,False读入数据只写入一个数组变量,默认False |
delimiter:指定边界符号是什么,不指定会导致每行数据为一个整体的字符串而报错
dtype:默认情况下对于较大的数据会将其变为科学计数的方式
unpack:默认是False(0),默认情况下,有多少数据,就会有多少行。为True(1)的情况下,每一列的数据会组成一行,原始数据有多少列,加载出来的数据就会有多少行,相当于转置的效果。
转置→是一种变换,对于numpy中的数组来说,就是在对角线的方向交换数据
numpy中的转置
xxx.transpose()
xxx.T
xxx.swapaxes(1,0)
# 以上都是转置 转置:简单来说就是行和列进行变换
9. numpy索引和切片
取行:
t1 = np.array([])
t1[2] # 取索引为2的一行
t1[2:] # 取索引为2开始的连续的多行
t1[2[2,8,10]] # 取索引为2开始的不连续的多行
取列:
t1 = np.array([])
t1[:,0] # 取索引为0的一列
t1[:,2:] # 取索引为0开始的连续的多列
t1[:,[0,2]] # 取索引为0和2的行
取行和列:
t1 = np.array([])
t1[2,3] # 取索引为2的行第3列的数
取多行和多列:
t1 = np.array([])
t1[2:5,1,4] # 取第3行到第5行,2行到4列
取多个不相邻的数:
t1 = np.array([])
t1[[0,2,2],[0,1,3]] # 取第1行第1个数、第3行第2个数、第3行第4个数
10. numpy中三元运算符
t1 = np.array([])
np.where(t<=3,100,300) # 数组中小于3替换成100,大于3替换300
np.clip(10,18) # 数组中小于10替换成10,大于18替换18
11. numpy中的数据拼接
t1 = np.array([])
t2 = np.array([])
np.vstack((t1,t2)) # 竖直拼接(每行拼接一起)
np.hstack((t1,t2)) # 水平拼接(每列拼接一起)
12. numpy中的行列交换
t1 = np.array([])
t[[1,2],:] = t[[2,1],:] # 行交换
t[:,[0,2]] = t[:,[2,0]] # 列交换
13. numpy更多好用的方法
获取最大值最小值的位置
np.argmax(t1,axis=0) # 获取最大值位置 np.argmin(t1,axis=1) # 获取最小值位置
创建一个全为0的数组
np.zeros((3,4)) # 创建一个全为0的数组
创建一个全1的数组
np.ones((3,4)) # 创建一个全1的数组
创建一个对角线为1的正方形数组(方阵)
np.eye(3) # 创建一个对角线为1的正方形数组(方阵)
14. numpy生成随机数
参数 | 解释 |
---|---|
.rand(d0, d1, …dn) | 创建d0-dn维度的均匀分布的随机数数组、浮点数,范围从0-1 |
.randn(d0, d1,…dn) | 创建d0-dn维度的标准正态分布随机数、浮点数,平均数0,标准差1 |
.randint(low, high, (shape)) | 从给定上下限范围选取随机数整数,范围是 low, high,形状是shape |
.uniform(low, high, (size)) | 产生具有均匀分布的数组,low起始值,high结束值,size形状 |
.normal(loc, scale, (size)) | 从指定正态分布中随机抽取样本,分布中心是loc(概率分布的均值),标准差是scale,形状是size |
.seed(s) | 随机数种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以每次生成相同的随机数 |
t.random.randint(10,20,(4,5)) # 创建4行5列的整数数组,范围从10<=x<20
t.random.seed(10) # 生成随机种子,可以每次生成相同的随机数
15. numpy的注意点copy和view
a=b # 完全不复制,a和b相互影响
a=b[:], # 视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的
a=b.copy(), # 复制,a和b互不影响
16. numpy中的nan和inf
nan(NAN,Nan):not a number表示不是一个数字
什么时候numpy中会出现nan:
当我们读取本地文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)
inf(-inf,inf):infinity.inf表示正无穷,-inf表示负无穷
什么时候会出现inf包括(-ing,+inf)
比如一个数字除以0(python中会直接报错,num中是一个inf或者-inf)
如何指定一个nan或者inf?注意type类型:
17. numpy中nan的注意点
18.numpy中常用的统计函数
t.sum(axis=None) # 求和
t.mean(a,axis=None) # 均值,受离群点影响较大
np.median(t,axis=None) # 中值
t.max(axis=None) # 最大值
t.min(axis=None) # 最小值
np.ptp(t,axis=None) # 极差,即最大值和最小值之差
t.std(axis=None) # 标准差
默认返回多维数组的全部的统计结果,如果指定axis,则返回一个当前轴上的结果
标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间的差异较大;一个较小的标准差,代表这些数值较接近平均值。反映出数据的波动稳定情况,越大表示波动越大,越不稳定
三、Pandas
1.为什么要学习pandas
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据
2.什么是pandas
高性能的,易用的数据结构和数据分析工具
3.pandas的常用数据类型
- Series 一维,带标签数组
- DataFrame 二维,Series容器
4.pandas之Series创建
import pandas as pd
pd.Series([1,23,2,2,1]) # pd.Series 生成类似enemuate()函数,第一列是索引,第二列是具体数据
import pandas as pd
t2 = pd.Series([1,23,2,2,1],index=list('abcde')) # 指定索引0,1,2,3,4 变为 a,b,c,d,e
temp_dict = {'name':'xiaohong','age':30,'tel':10086}
t3 = pd.Series(temp_dict) # 生成左列为键,右列为值的数据
temp_dict = {'name':'xiaohong','age':30,'tel':10086}
t3 = pd.Series(temp_dict) # 生成左列为键,右列为值的数据
t3.astype('float') #修改数据类型,可防止数据为NaN
5.pandas之切片和索引
t3['age'] # 取索引为age的行
t3[1] # 取第一行
t3[2] # 取第二行
t3[:2] # 取前两行
t3[[1,2]] # 取不连续的两行
t3[['age','tel']] # 取键为age和tel的两行
t = pd.Series([0,1,2,3,4,5,6,7,8,9])
t[t>4] # 取值大于4的行
6.pandas之Series的索引和值
对于一个陌生的series类型,我们可以获取到他的索引和具体的值
Series对象本质上是由两个数组构成。一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键 -> 值
ndarray(numpy形成的数组)的很多方法都可以运用于series类型,比如argmax,clip
series具有where方法,但是结果和ndarray(numpy形成的数组)不同
t3.index # 获取到t3里的所有索引
list(t3.index) # t3内的所有索引转为列表
list(t3.index)[:2] # 取t3内的索引列表中的前两个索引
t3.values # 获取到t3里的所有值
7.pandas之读取外部数据
import pandas as pd
df = pd.read_csv(路径) # pandas读取csv中的文件
pd.read_clipboard() # pandas读取剪贴板内的数据
pd.read_excel() # pandas读取excel内的数据
pd.read_json() # pandas读取json格式的数据
pd.read_sql(sql语句,链接) # pandas读取数据库
print(df)
那么,mongodb呢?
from pymongo import MongoClient
import pandas as pd
client = MongoClient()
collection = client['douban']['tv1']
data = list(collection.find())
t1 = data[0]
t1 = pd.Series(t1)
print(t1)
8.pandas之DataFrame
DataFrame既有行索引,又有列索引
行索引,表名不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
import pandas as pd
t = pd.DataFrame(np.arange(12).reshape(3,4))
pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('WXYZ')) # 指定行索引为abc 列索引为WXYZ
# DataFrame传入字典数据
d1 = {'name':['xiaoming','xiaogang','age':[20,32],'tell':[10086,10010]]}
t1 = pd.DataFrame(d1)
print(t1)
d2 = [{'name':'xiaohong','age':32,'tell':10010},{'name':'xiaogang','tell':10010}]
t2 = pd.DataFrame(d2)
print(t2)
# 综上所述,DataFrame传入字典数据,数据可以字典里键对应的值为列表。或者列表里有多个字典
from pymongo import MongoClient
import pandas as pd
client = MongoClient()
collection = client['douban']['tv1']
data = collection.find()
#取出数据内不要的数据
data_list = []
for i in data:
temp = {}
temp['info'] = i['info']
temp['rating_count'] = i['rating']['count']
temp['rating_value'] = i['rating']['value']
temp['title'] = i['title']
temp['country'] = i['tv_category']
temp['directors'] = i['directors']
temp['actors'] = i['actors']
data_list.append(temp)
df = pd.DataFrame(data)
print(df)
和一个ndarray一样,我们通过shape,ndim,dtype了解这个ndarray的基本信息,那么对于DataFrame我们有什么方法了解呢?
# DataFrame的基础属性
df.shape # 行数 列数
df.dtypes # 列的数据类型
df.ndim # 数据维度
df.index # 行索引
df.columns # 行索引
df.values # 对象值,二维ndarray数组
# DataFrame整体情况查询
df.head(3) # 显示头部几行,默认为5行
df.tail(3) # 显示末尾几行,默认5行
df.info() # 相关信息概览:行数,列数,列索引,列非空值个数,列类型,内存占用
df.describe() # 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
import pandas as pd
df = pd.read_csv('./dogNames2.csv')
print(df.head()) # 查看结构
print(df.info()) # 查看描述信息
# DataFrame中排序的方法
df.sort_values(by='Count_AnimalName',ascending=False)
print(df.head(5)) #查看前五行数据
重点:pandas的排序方法!!!!
df.sort_values(by='列索引') # pandas排序方法
df.sorted[:100] # 排序列中前一百行的数据
pandas取行或者取列的注意点
方括号写数组,表示取行,对行进行操作
方括号写字符串,表示的取列索引,对列进行操作
print(df[:20])
print(df['Row_Labels'])
9.pandas之loc和iloc
还有更多的经过pandas优化过的选择方式:
- df.loc 通过标签索引获取行数据
- df.iloc 通过位置获取行数据
import pandas as pd
t3 = pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('WXYZ'))
# df.loc
t3.loc['a','z'] # 取a行z列的数据
t3.loc['a',:] # 取a行的数据
t3.loc[:,'Y'] # 取Y列的数据
t3.loc[['a','c'],:] # 取a行和c行的数据
t3.loc[:,['W','Z']] # 取W列和C列的数据
t3.loc[['a','b'],['W','Z']] # 取a行和b行中的W列和Z列的数据
# df.iloc
t3.iloc[1,:] # 取第1行的数据
t3.iloc[:,2] # 取第3列的数据
t3.iloc[:,[2,1]] # 取不连续的多列,第2列和第1列的数据
t3.iloc[[0,2],[2,1]] # 取第0行和第2行中的第2列和第1列的数据
t3.iloc[1:,:2] # 取第一行后的每一行和倒数第二列前的每一列的数据
10.pandas之布尔索引
& 符号表示 且
| 符号表示 或
注意:使用 & 或 | 时不同的条件需要括号括起来
import pandas as pd
df = pd.read_csv(',/dogNames2.csv')
df[(df['Count_AnimalName']>800)&(df['Count_AnimalName']<1000)] # 选Count_AnimalName列大于800并且小于1000的数据
df[(df['Count_AnimalName']>800)|(df['Count_AnimalName']<1000)] # 选Count_AnimalName列大于800或小于1000的数据
.tolist()方法:将有n行的矩阵或数组转化为只有1行的列表
.unique()方法:将所有数据自动形成一个列表
11.缺失数据的处理
对于NaN的数据,在numpy中我们是如何处理的?
在pandas中我们处理起来非常容易
判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
处理方式1:删除NaN所在的行列dropna(axis=0,how=’any’,inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.finallna(t.median()),t.fillna(0)
处理为0的数据:t[t==0] = np.nan
当然并不是每次为0的数据都需要处理
需要0变为NaN的原因是在计算平均值等情况,NaN是不参与计算的,但是0会,可以使数据更完美
处理方式1:
pd.isnull(t3) # 判断是否为NaN True则为NaN
t3[pd.notnull(t3['W'])] # 显示t3内W列中没有null的行
t3.dropna(axis=0) # 删除axis=0轴(x轴)中有NaN的行
t3.dropna(axis=0,how='all') # 删除axis=0轴(x轴)中全部都是NaN的行
t3.dropna(axis=0,how='any') # 删除axis=0轴(x轴)中有NaN的行
t3.dropna(axis=0,how='any',inplace=True) # inplace就地修改,默认为False,设置成True表示生成的数据覆盖原t3,即t3 = t3.dropna(axis=0,how='any',inplace=True)
处理方式2:
# 我们通常会在有NaN的位置填充平均数 要用到t.mean()
t2.fillna(t2.mean()) # 将t2内为NaN的数据填充为t2的平均,t2.mean()
注意:在numpy中如果数据中存在NaN,那么计算均值的时候结果就为NaN。但是在pandas中数据存在NaN,计算均值的时候仍然有结果,自动忽略NaN
11.数据合并之join
join:默认情况下它是把行索引相同的数据合并到一起
df1 = pd.DataFrame(np.ons((2,4)),index=['A','B'],columns=list('abcd'))
df2 = pd.DataFrame(np.ons((3,3)),index=['A','B','C'],columns=list('xyz'))
df1.join(df2) # 如果df2行数大于df1的行数,则df2的行数和df1的行数一样,即去掉df2中多于df1的行
# 如果df2行数小于df1的行数,则df2中多的一行的数据变为NaN
df2.join(df1)
12.数据合并之merge
merge:默认情况下它是把列索引相同的数据合并到一起
df3 = pd.DataFrame(np.zeros((3,3)),columns=list('fax'))
df1.merge(df3,on='a') #df3并到df1,根据列索引a去交集
df1.merge(df3,on='a',how='inner') #df3交到df1,根据列索引a,默认的内连接去交集
df1.merge(df3,on='a',how='outer') #df3并到df1,根据列索引a,外连接去并集
df1.merge(df3,on='a',how='left') #df3交到df1,根据列索引a,左连接去交集
df1.merge(df3,on='a',how='right') #df3交到df1,根据列索引a,右连接去交集
13.分组和聚合
在pandas中类似的分组的操作我们有很简单的方式来完成
df.groupby(by=’columns_name’)
import pandas as pd
import numpy as np
file_path = './starbucks_store.csv'
df = pd.read_csv(file_path)
# print(head(1))
# print(df.info())
grouped = df.groupby(by='Country')
# print(grouped) #输出是一个DataFrameGroupBy对象,可以进行遍历,调用聚合方法
#遍历
# for i,j in grouped:
# print(i)
# print(j)
#调用聚合方法
country_count = gouped['Brand'].count()
print(country_count['US'])
print(country_count['CN'])
china_data = df[df['Country'] == 'CN']
grouped = china_data.groupby(by='State/Province').count()['Brand']
print(grouped)
grouped = df.groupby(by=’columns_name’)
grouped是一个DataFrameGroupBy对象,是可迭代的
grouped中的每一个元素是一个元组
元组里面是(索引(分组的值),分组之后的DataFrame)
如果我们需要对国家和省份进行分组统计,应该怎么操作呢?
grouped = df.groupby(by=[df[‘Country’],df[‘State/Province’]])
很多时候我们只希望对获取分组之后的某一部分数据,或者说我们只希望对某几列数据进行分组,这个时候我们应该怎么办呢?
获取分组之后的某一部分数据:
df.groupby(by=[‘Country’,’State/Province’])[‘Country’].count()
对某几列数据进行分组:
df[‘Country’].groupby(by=[df[‘Country’].df[‘State/Province’]]).count()
14.索引和复合索引
简单的索引操作:
- 获取index:df.index
- 指定index:df.index = [‘x’,’y’]
- 重新设置index:df.reindex(list(‘abcdef’))
- 指定某一列作为index:df.set_index(‘Country’,drop=False)
- 返回index的唯一值:df.set_index(‘Country’).index.unique()
15.总结
16.时间序列
不管在什么行业,时间序列都是一种非常重要的数据形式,很多统计数据以及数据的规律也都和时间序列有着非常重要的联系
而且在pandas中处理时间序列是非常简单的
pd.date_range(start=None,end=None,periods=None,freq=’D’)
start和end以及freq配合能够生成start和end范围内以频率freq的一组时间索引
start和periods以及freq配合能够生成从start开始的频率为freq的periods个时间索引
import pandas as pd
pd.date_range(start='20171230',end='20180131',freq='D') # D表示天,每隔一天输出一次
pd.date_range(start='20171230',end='20180131',freq='10D') # 10D表示天,每隔十天输出一次
pd.date_range(start='20171230',periods=10,freq='D') # 输出从2017.12.30开始往后的每一天
pd.date_range(start='20171230',periods=10,freq='M') # 输出从2017.12.30开始往后的每一月最后一天
pd.date_range(start='20171230',periods=10,freq='MS') # 输出从2017.12.30开始往后的每一个月的第一天
17.在DataFrame中使用时间序列
index = pd.date_range(‘20170101’,periods=10)
df = pd.DataFrame(np.random.rand(10),index=index)
回到最开始的数据案例中,我们可以使用pandas提供的方法把时间字符串转化为时间序列
df[‘timeStamp’] = pd.to_datetime(df[‘timeStamp’],format=‘ ‘)
format参数大部分情况下可以不用写,但是对于pandas无法格式化的时间字符串,我们可以使用该参数,比如包含中文
18.pandas重采样
重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样
pandas提供了一个resample的方法来帮助我们实现频率转化