利用python 进行数据分析全书总结



numpy 全书总结宝典

3

1.tab的用法

B等于一个序列,b.table 即可得到其所有属性。

2.?的使用

B等于一个序列或者一个函数,b?既可以得到其所有的相关信息。

3.?? 的使用

能够调出b函数的全部原始代码

4.一些快捷键

Ctrl+C复制    ctrl+a 将光标移到行首     ctrl+e 将光标移到末尾 ctrl+k删除从光标到行尾的所有内容    ctrl+f将光标向前移动一格   ctrl+b将光标向后移动一格  ctrl+l清屏。

5.常用的magic命令

%run script.py 执行一个python脚本

%time statement 报告statement的运作时间

%timeit statement 报告statement 多次执行的平均时间

4. if __name__==’__main__’:

直接执行程序,而非模块的导入

 

 

4

  1. 首先import nuumpy as np

  2. 创建ndarry 的方法有:

    最简单的array   其次为np.zeros   np.ones   np.arange(int):类似于内置的range用法,但返回的是一个ndarray,而非一个列表      np.random.randn(int 或者是一个shape)   np.arange(int).reshape(shape  可以为二维,也可以为三维的).    注:整型有8163264位,浮点型为163264128位,复数为最大256

  3. 除了2中提到的一些np属性,还有一个eye/identity属性,用于生成一个对角矩阵。(np.eye(N,N)==np.identity(N))

  4. 广播的概念要了解,即为数组的矢量运算

  5. 索引:切片,常规切片,和对多层切片[][],还有与布尔连用:书上92页,data[name==’bob’](其中data为一个数组,里边的判断输出布尔型,由此输出True 对应的行。    判断式子可以多个并列,利如书上94页,mask=(name==’bob’)竖杠(name==’tom’

  6. 花式索引:即接受一个(表示对应的行的index)或者是一对(表示对应的行

  7. 和列的index)作为参数,例如data[[……],[……]],另外一种方法为data[np.ix_([……],[……])],    花式索引跟切片所以不同,直接将数据复制到新的数组中

  8. 转置以及自身与转置的乘积     data.T     np.dot(data,data.T)    transpose 的用法:  如果其后没有跟参数,其实质与T无区别,如果带参数,一般为三个,transpose((…,…,…)),其三个参数分别表示三个维度,一般三个维度的编号为012 如果有变化,则是将对应的行或者列进行互换(书上97)

  9. np 的数组运算函数(通用函数):形式为np.absdata,其中data为数组

    abs   每个元素取绝对值

    sqrt   每个元素取平均值

    square  每个元素取平方

    exp      e的每个元素次方

    log log2 log10log1p   分别表示底数为e210,(1+x

    sign  各个元素的正负号,正数为1,负数为负一,零为零

    sin cos tan 余弦值

    ceil 大于等于该值的最小整数

    floor 小于等于该值的最大整数

    rint 将各个元素四舍五入到最接近于其自身的整数

    modf 将小数和整数部分以独立的数组形式返回

    isnan 返回布尔型

    isinf isfinite 返回布尔型,有限和无限

    arc   反三角函数

     

    二元函数np.func(参数1,参数2)

    add 两个数组对应元素相加

    subtract 从第一个数组中减去第二个数组元素

    multiply  两个数组相乘

    divid 除法

    power 数组1的元素为A ,数组2的元素为B ,为A B次方

    maximum 元素的最大级别运算

    minmum 元素最小级别运算

  10. np.where 的使用   

    参数为三个,np.where(…,…,…),参数一为数组满足的条件,比如数组data>0 等,第二个参数为满足该条件时要取得值,第三个参数为不满足条件时,要取得值。

     

  11. cumsum()cumprod()的使用

    前者为累加,后者为累积,两者均可带参数axis,如果不带参数,则会返回一个一维数组,内容为后者加前者的数列

    Axis=0 则在行方向上累加(积),axis=1,则在列方向上累加()

    常见的一些数据统计的方法:

    Sum (全部数据的总和,或者某一个轴向上数据的总和,指定axis)mean为算术平均值    std/var标准差和方差      minmax为最小值和最大值   argmax argmin 最大值和最小值的索引  cumsum cumprod

    线性代数

    两个矩阵的乘积,dot, x.dot(y)表示两个数组进行线性乘法。

     

  12. np.randomde 的几个重要函数

    permutation :返回一个序列的随机排列  data=np.array([5,4,2,1]),np.random.permutation(data)

    np.random.randn:参数可以为int 也可以为dtype 以给定的形态返回一个数组,满足标准正态分布(01

    np.random.randint(low,high=None,size=None,dtype),生成一个前闭后开的离散分布的整数型,low必须给出,若high未给出,则取值区间变为[0,low

    np.random.rand(),产生[0,1]之间的均匀分布的随机样本

    np.random_integers(low,high,size=int,dytype),返回的是[low,high],之间的均匀分布的整数型,如果high=None,则取值范围变为了[1,low]

    np.random.shuffle 返回一个打乱的数组

    np.random.choice(a,size=None,replace=True.p=None)a为数组,则从中选取数组,若aint 则从rangea)中选取数,replace 默认为True,代表选定的数字可以重复,p为选定数字的概率。

     

     

    5pandas

    1. series可以生成一个有索引的数组,比如object=Series([……]),object 可以通过values属性和index 属性来进行查看对应的数组值和相应的索引。

     

    2. Series=([……],index=[……]),可以通过index来进行相关的索引指定。

    3.object为一个Series,可以通过object[……]来进行索引,中括号里的内容可以为一个判断句。

    4.pd.isnull(object),pd.notnull(object),可用于判断是否有空值,输出的为布尔类型。

    5.object 为一个Series,可以通过object.index.name来进行对单层索引的命名

    6.dic 为一个字典类型,可以通过Seeries(dic),实现对其的转换

    7.DataFrrame({…:[……],…:[……]}其本质为JSON类型

    8.DataFrame 可以通过Columns,index来对其数据进行行命名和列命名

    9.index的类型,包括广泛的Index,Int64Index,MultiIndex,DatetimeIndex,PeriodIndex

    10.index 的属性:append(连接另外一个Index,产生一个新的Index)diff(Index的差集)intersection(交集),union(合集),delete(删除索引i处的数据,并得到一个新索引)drop(删除传入的值,并得到新索引)insert(将元素插入到索引i处,并得到新索引)is_monotonic(当各元素均大于等于前一个元素时,返回True,is_unique(Index没有重复时,返回True),unique(计算unique中的唯一数组).

    11. 如何对索引进行修改:  reindex([……]),返回一个索引改变后的Series,或者DataFrame

    填充Nan值可以用fill_value,也可以用reindexmethod 参数,可以为ffill,bfill

    另一种方法为ix[[……],[……]],前一个为行索引,后一个为columns 索引,可以一次性的对DataFrame 进行index columns的同时修改

     Reindex的参数(要变换的index,method,fill_value,limit(可以向前或者向后填充的最大填充量)

  13. 丢弃某一指定轴上的数据,用drop[……],中括号内的为行或者列索引名字。

  14.  

    DataFrame的索引方法有ix[[……],[……]],来指定index columns,其次用xs如上可以得到一个Series,data.get_value(‘2’,’two’)可以锁定数据5data.set_value(‘2’,’two’,’6’),可以返回上述的DataFrame,5变为6

  15. DataFrame Series 两者可进行计算,这种运算统称为广播

  16. Lambda 结合apply 运用到DataFrame中,如下图所示,类似于后续的聚合应用(groupby

  17. 索引的排序方法(注意是索引的排序,而非其对应得数值)用sort_index.

    例如一个DataFrame,其行索引为(‘one’,’three’,列索引为(’a’,’b’,’c’,d’)那么data.sort_index(),默认为为行索引排序,为one threeData.sort_index(axis=1),则为列索引排序,为(’a’,’b’,’c’,’d’,默认都为有小到大排序,如果想要由大到小排序则为(参数ascending=False,sort_index 自身是对索引进行排序,但是如果加上sort_index(by=’’)引号内为索引名,则是对相应的索引里的值进行有小到大排序,2而索引也跟排序后的数值相对应的发生变动,其实质变成了对值进行排序

     

    18 Series 的数值如何进行由小到大的排列?用order()

    19.常见的DataFrame 的数据计算函数,data=DataFrame() data.count().Nan的值数量,describe(),各种汇总函数的汇总  min()。max(),argmax(),argmin().最小值和最大值的索引的位置(整数),idxmax(),idxmin(),计算最大值和最小值的索引值,sum(),mean(),median() 中位数,mad()绝对偏差,var方差,std 标准差,cumsum().cumprod()

    20.DataFrame Seriesunique(),value_counts()的使用方法在书146页查看

    21.对于缺失值得处理:一方面可以滤掉,data=Series,DataFrame ,data,dropna(how=’all’),默认参数,也可以为any

    另一方面为填充用fillnadata.fillna(value,method,axis,limit,inplace).其中value为填充个Nan的值,method为填充方法可以为ffill,bfill,axis默认为0,当用bfill或者ffill时,limit为限制填充的最大行或者列。Inplace为修改调用者对象而不产生副本,如果其为False,则产生了副本,会直接输出结果,如果为True ,则必须调用修改对像,才能输出结果

    22.  层次索引:

     

     

     

    23.层次索引的变化(即如何将外索引变为内索引,内索引变为外索引)

    使用swaplevel’……’,’……’)参数分别为外层索引和内层索引

    sortlevel是根据参数(参数可以是外层索引,也可以是内层索引),对索引进行一个排序,假设参数为外层索引,那么就对外层索引进行一个怕排序,当然排序为由小到大,其对应的内层索引也要发生相应的顺序变化。详见书156页。

     

     

    6

  1. Pandas 中读取文件的方式  read_cs(读取文件,文件中的内容被逗号隔开,并且第一行的内容为引用字段,或者称为列索引)    read_table (读取文件,文件内容被、\t隔开)  read_fwf(读取定宽的数据,即没有分隔符)   read_clipboard(读取剪贴板上的内容)

  2. 读取的书写方式为data=pd.read_csv(文件的绝对路径)读出文件数据格式为DaataFrame 类型,即以第一行的内容为列索引名,行索引则自动生成(012),注:也可以用read_table 读取一个csv文件,不过要在参数里著名sep=’,’,即分隔符(separator)为逗号

  3. 一般来讲,csv文件的第一行内容默认为数据的列命,但是也可以不用第一行作为列命,就在路径后面加一个参数header=None,则列名就会变为(X1,X2……,也可以在路径的后面加上names=[……],来重新定义列名

  4. 如果想把数据中的某一列当作行索引拎出来,可以用参数index_col=

  5. 可根据index_col进行层次化索引(详见书上的164页)

  6. Pd.read_csv/pd.read_table 的一些参数   除了上述的path,sep,names,index_col,之外,skiprows=[…,…,…]可以跳过一些文件中不符合格式的,或者不想读的行,而读出中括号内的指定的行,na_valus,用于标记nan,可以用NULLNA,或者-1.#IND标记 comment后输入的为一个字符串(例如#),如果该字符串出现在行首,则跳过该字符串,直接以下一行为列索引名,如果出现在末尾,或者中间行,则直接跳过该行,输出下一行。Converts 由列号/列名  跟函数之间的映射关系组成的字典,比如{foo’:f},会对foo列的所有值实行f     nrows 为读取的行数,从文件开始处算起,如果nrows=0,则输出““     skip_footer, 需要忽略的步数,从文件的末尾处算起,如果skip_footer=2,且文件只有两行,那么与nrows=0输出的结果一样。

  7. to_csv 可以将数据写入到一个指定的csv文件当中去,比如data为一个DataFrame,那么data.to_csv则会以read_csv的反渠道将data编写进文件中。

  8. To_csv 后面的参数有sep 可用与指定分隔符,不局限于’,’  写入文件中的数据可能含有缺失值,可以用类似的na_rep=’NULL’,将其标记出来

  9. 写进去的数据如果没有设置其他选项,则会写出行(index),列(header)的标签,但是将这两个参数设定为False 则会被禁用

  10. 如果只是想把数据的一部分写入文件中,则可以用index(),cols()指定要写入的内容。

  11. 如何输出json文件  import json   f=json.load(object),同样的,可以用josn.dumps(object),将一个python 对象转化为一个json

     

     

    7

  1. 数据的合并  merge来进行合并,其特点有如下几点:

    当多对一合并时,这里的多对为DataFrame({‘key’:[‘b’,’b’,’a’,’c’,’a’,’a’,’b’]}

    DataFrame({‘key’:[‘a’,’b’,’a’]})第一个里面有多个a,b,c,第二个里面只有一个a,b,c   3*1=3 故有3a3b   一般情况下,是根据相同的键,将两组数据取交集,但也可以通过how函数来进行指定。  没有指定那个列时,merge会将重叠列的列名当作键,也可以用on(只有一个键名)或者left_on,right_on(多个键名)进行排序

     

    多对多时,出现的a的个数,b的个数为两个中的个数的乘积

     

    merge的函数总结  首先how ,可以为inner(两者根据重叠的列进行取交集,为默认),也可以为outer ,取并集两者中不同的数据都会显示,也可以为left,除了交集以外,还会显示所有左侧的数据,同理right除了交集以外,还会显示右侧的所有

    on 指定数据的键,如果未指定,则会默认用重叠的键

    left_on,right_on用作左侧的连接键和右侧的连接键

    sort   根据连接键对合并后的数据进行排序,默认为True

    left_index,right_index,将行索引用做连接键,两者必须一起出现,否则报错,默认都为False

    Df1df2 都为上述的DataFrame

    Suffixes用于追加重叠列名的末尾,默认为(_x,_y,例如上面的key_x,key_y,可以指定为其他,比如_1,_2

     

  2. 有时候重叠的键一个在DataFrame 的列中比如key:’a’,’b’,’a’等。而另一个在index=[‘a’,’b’].,这时候就要传入left_index,right_idex=True    而对于层次化索引,就麻烦,需要以列表的形式指定用作合并的键,例如用left_on,或者right_on=[……,……],详见书上的192   对于行索引,还有一个方法就死用join,(比较简便,但注意,其只能用于行索引等价于merge(left_index=True,right_index=True  其形式为data.join(data1,how=),how默认为left,可以通过right,outer,inner来改变。  其还有参数on ,用法仍为指定键的作用

     

     

  3. 轴向上的索引,一方面可以用np.concatenate

    另一方面可以用pd.concat,它首先可以将不同索引的数据连接起来

    Pd.concat join参数设置为inner,加上axis=1,则会取出交集

    还可以利用keys函数制造层次化索引

    Concat的一些参数:

    Object 参与对接的对象

    Axis   指明连接的轴向,默认为axis=0

    Join  可以为inner 也可以为outer,默认为outer

    Keys 可以指定用于制作层次索引

    Ignore_index 当行索引没有实际的意义时,可以将其设定为True ,那么系统会自己将行索引排序,顺序是整合后的顺序

  4. 如果一个DataFrame 或者一个Serie里面有缺失数据,想要用另外一个里面的数据填充到里面,可以data.combine_first(data1),  前提是datadata1的结构形式必须一样。

  5. ataFrame stackUnstack行旋转。为了实现真正的索引,必须将单层索引先转化为双层索引,然后再用unstack(0),或者unstack(行索引名),进行数据的旋转(行变为列,列变为行

    单层索引可以通过stack()变为双层索引,另外一种方法是用pd.concat[d1,d2],keys=[……])来制造双层索引。具体看下面的例子

     

    未转化为双层索引,就用了unstack(行名),没有实现数据的行列变化

    unstack(0)也不行

    必须先用stack()转化为双层索引后再用unstack()可以实现数据的行列转化

  6. 可以用pivot(行索引的名字,列索引的名字)用于将纵向很长的(有重复)DataFrame 转化为横向的,视觉上看上去会短,详见P203

  7. |drop_duplicated(),有时候列中有很多重复的数据,例如下面:

    运用duplicated(),没有参数默认以(k1,k2)为单位进行比较,用于表示各行是否重复,返回boolean 型。

    而另一个属性drop_duolicates用于返回一个移除重复行的新的dateFrame

    没有参数时会对所有的列进行对比并删除重复的行,也可以加入参数指定列比如drop_duplicates([k1])

    默认保留重复行的第一个,dupicated,drop_duplicates,可以设定take_last=True来保留最后一个。

     

  8. DataFrame中加入映射关系,书中的例子是列名分别为食物,价格组成的DataFrame,想要在这个里面加入列名食物的来自于的动物,假设给出了一个字典dic,里面键为食物名和值为食物对应的动物的映射,假设定的加入的新名为‘’animal’,那么用data[‘animal’]=data[‘food’].map[str.lower].map[dic],然后输出data,即可以得到一个全新的DataFrame

  9. 前面总结了替换nan的方法为fill_value,fillna(method=ffillor bfill),也可以用data.replace(要替换的值,np.nan),即用后者替换前者,也可以一次性替换多个data.replace([替换值1,替换值2][np.nan,0]),也可以用字典的形式data.replace(替换值1np.nan,替换值20)

  10. 离散化和面元:  

    用于将数据划分到某一个指定的区域内cats=pd.cut(数据1,区域)

    注意输出的是每个数据属于的区域

    labels可以用阿拉伯数字(01234……)对数据所属的不同区域进行划分

    Levels可以显示不同的区域功能类似于pd.cuts(data,bins)

    Pd.value_counts(cats)可以用于输出落在某一个范围内的数据的个数

    默认区间都为左开又闭,可以用参数right=False,来进行改变,pd.cut(data,bins,right=False)来进行

    Labels默认为用阿拉伯数字进行标记,也可以设定为其他  pd.cut(data,bins,labels=[…,…,…])

    如果向cut 输入的不是具体的边界,而是划分的个数,例如pd.cut(data,4),则系统会根据数据的最大值和最小值自动划分为输入的区域个数

       Cut可能无法使各个面元中含有相同数量的数据点,而qcut则可以。 

  11. 利用permutation 来生成一组数,作为索引,对对应的Series 或者DataFrame 进行相关的排序,形式为data.take()

     

    如果不想对DataFrame 全部排序,可以选择用切片

    应该注意到了,permutation产生的数代表的为索引,其实,不一定要用permutation,np.random中的其他属性也可以完成,并且产生的个数不一定一定等于要重新排序的数据个数,例如下面的例子,数据个数为5个,产生的索引个数为10

    注意sample产生的数字表示data的数据索引

     

    8章(绘图)

    1.首先要输入模块import matplotlib.pyplot as plt

    要画图,matplotlib的图都是在figure 里面的,因此必须创建一个figure,如下,会打开一个空窗口

    不能通过figure来画图,必须创建subplot

    Axs=fig.add_subplot(参数1,参数2,参数3),意思是会生成参数3个参数1*参数2的窗口,我们可以在subplot里画图 

    除此之外,还可以用plt.subplots,一次性实现创建figure,subplotPlt.subplots23),可以生成6subplots

    Plt.subplots()的一些参数,如上第一个为subplots的行数,第二个为对应的参数,sharex,sharey False ,表示横坐标和纵坐标坐标轴都是一样的,一般不设定为True**fig_kw,figure的其他参数,比如上面的figsize

    上面的图是不是有间距?可以利用plt.subplots_adjustleft=None,bottom=None,top=None,wspace=None,hspace=None)可以去掉间距

    除了上述的方法之外,还有plt.plot属性也可以一次性的构建图像,plt.plot(参数为一个np,array)可直接输出一个图片(实质为一个subplot

     

     

    用这种方法,plt有属性例如xlim(ylim)返回对应轴的范围,xticks(yticks)返回对应的刻度。Xticklabels(yticklabels)返回对应的标签

    命令ax=plt.plot(参数),可以用ax.set_xlabel(‘zifuchuan’)来设定x轴的标题,ax,set_title(‘’),来设计整个画的标题。

    Ax.set_xticklabels([]),来设计每个刻度的标题,可以用rotation=数字比如30来设定角度,用fontsize来设定字体大小。

    2. 画图型,第一步:fig=plt.figure(),第二步:ax=fig.add_subplot(1,1,1)

    Rect=plt.rectangle()(矩形,需要指定左下角的点的坐标,长和宽,用圆括号将左下角点的坐标括起来)

    Cir=plt.circle()(指定圆心,半径,用圆括号将圆心坐标括起来)

    Pon=plt.polygon()(多边形,以三角型为例,需要指定三个点的坐标,用中括号括起来)

     

     

    Ax,add_patch(rect)

    Ax.add_circle(cir)

    Ax,add_polygon(pon)

    3Series DataFrame 来制作图片,series.plot(),DataFrae.plot()

     

    可以看得出,其横向索引为其横坐标的刻度。

    可以看出其行索引为其横坐标刻度,列索引为其label注释

    4.series/dataframe.plot的一些方法参数:lable图例的标签,为上图小方框的标签   style 用于设定线性风格(‘ko—‘),alpha 透明度。0-之间    kind 绘制图形的种类(line 线形,bar 柱形,barh 横向柱形,hist直方图   box 盒图  kde 核密度估计图,density  密度图,,area 面积图,pie饼图   logy/logx Y轴上或者X轴上使用对数刻度  use_index 将对象的索引用作刻度标签,比如上边的例子,行索引为x轴刻度     rot 为旋转刻度标签,等于一个整型,xticks/yticks 等于一个列表,指定刻度   xlim/ylim 显示界限,grid显示轴网格线,默认不打开。。。。 

    Ax参数的使用,详见下面的例子,其实质是将数据分配给不同的subplot

     

     

     

    除了这些以外,DataFrame 还有一些属性,subplots 默认为False,表示是否将各列传入到单个的subplot 中去

    还有sharex,sharey,

     

    Figsize=None可以改变图像的大小   title可以为图像加入一个标题

     

    直方图kind=hist’展示

     

    9章 数据的拆分整合应用

    1.

     

    以其为例,进行数据规整应用的格式为df[data1].groupby([‘key1’]).mean(),上述这个是用一个series作为分组键,实际上任何长度的适当数组都可以,例如用7891011

     

    如果分组键有两个,df[data1].groupby([‘key1’’key2’]).mean(),则表示一个外索引,一个内索引

     

    2.对分组进行迭代

     

    I起始表示的是索引,j 表示为df 整体,类似于enumerate

    如果是双层索引,则用上面的格式

    3 df['data1'].groupby(['key1])===df.groupby(['key1'])['data1']

    这两种书写的方式都可以,一个分组在前,一个分组在后

     

    4.除了可以用series,数组进行分组,还可以用字典进行分组,指定axis=0,得出来的就是列的个数发生变化,axis=0行变化,axis=1列变化

     

    将字典转化为series,效果是一样的

    将名字的长度作为函数传入groupby,通过函数作为分组键

     

     

    利用索引名进行分组

     

     

    5.数据的应用(聚合)

    像之前用过的sum ,count,mean.descirbe 等都是一些聚合方法,也可以用agg加入自己用程序写的方法agg(函数名)

    数据聚合的一些方法:countNA值得数量   sumna值得和

    Mean na值的平均值  median na 值的算术中位数,std/var标准差,方差   min/max    prod na 值的积    first/last  第一个和最后一个的非na   

    6. 面向列的函数应用

    如果要对不同的列进行不同的聚合方式,需要用到agg([方法1,方法2]),如果掺入传入的是一个由(name,function)元组组成的列表,则各元祖的第一个元素就会被用作DataFrame的列名,格式为agg([(列名,方法),(列名,方法)])也可以用agg(dic),字典的键对应元组中的列名,值对应的是元组中的方法。

     

    7.无索引的形式返回聚合数据

    可以向groupby传入参数as_index=False来进行删除索引的功能,两者的区别如下:

     

    8.transform的理解,如下例子,相当于先进行people.groupby(key).mean(),然后将该值在分配给key 对应的人名。

    8.agg/apply 去进行填充NAN

     

     

    9.一个重要的例子:

    黑桃,红桃,梅花,方片

    输出结果

    如何先打乱这幅牌,并任意抽出n张,n不定

     

    这段程序需要注意两点:(1)permutation shuffle 的区别,一个是有返回值的,是一个数组,另外一个没有返回值

    (2)take里面的结果实际上是一个打乱的数组取前n个,充当S的索引参数

     

    进行拆分合并和应用

    注意apply agg的区别,agg为什么会报错?用agg时定义的函数一般只有一个参数,即要合并应用的数组本身

     

     

    10.透视表和交叉表

    前边的groupby可以用指定的键进行分组,但groupby 并不能将指定的键特定为行索引或者列索引   而透视表和交叉表可以完成这一要求

     

    其格式为:data.pivot_table([…],rows=[……],cols=[……])

    第一个中括号内的为要进行分组的值(即透视表的valued属性),第二个为要做为行索引data中的键名,可以为多个,若为多个,则会形成层次索引,(现在的版本中用index替代rows),第三个中括号内的为data内的作为列索引的键名

     

    透视表的一些常用属性(value,index,cols,aggfunc  接参数自定义函数名或者len sum count mean 等应用算法,   fill_value 填充nan 值,margins 添加行/列小计和总计,默认为False

    Crosstab  data.crosstab([……],[……])

    第一个为行索引参数,其为data的键的列名,第二个为列索引参数,其为data的键的列名,其与透视表的区别在于没有index cols

     

     

    10

  1. 如何显示当前时间,用now=datetime.now()属性,输出的时间为年,月,日,时,分,秒,毫秒

  2. 如何将两个时间相减? datetime(年,月,日,时,分,秒)可以不全有  减去   datetime(年, 月,时,分,秒)   timedelta用于表示两个datetime对象之间的时间差  

    必须先写  from datetime importtimedelta

    datetime(年,月,时,分,秒)+timedelta(int 参数),默认为天

    3.datetime的几个属性,有date,无参数,即datetime.date,表示年月日,类似的timedatetime.time,无参数,表示时,分,秒,毫秒。

    还有就是datetime timedelta

    4.重点:   datetimede 的格式定义

    %Y4位数的年    %y 2位数的年   %m 两位数的月[01,12],%d 两位数的日[01,31]  %H 24小时制(00-24),%I12小时制(01-12), %M 2位数的分

    %S两位数的秒,  %w用整数表示的星期几,(0,6),零表示星期天

    %U每年的第几周(0,53),星期天被认为是每周的第一天,每年第一个星期天之前的那几天被认为是第零周

    %W每年的第几周(0,53),星期一被认为是每周的第一天,每年第一个星期天之前的那几天被认为是第零周

     

    %F %Y-%m%d的简写形式   2012-4-18

    %D %m/%d/%y的简写形式    04/18/12

     

     

    5.如何将一个时间转化为字符串   有两种方式,如下:

    一种为用str直接转,形式默认。另一种为用strftime(指定格式化形式)

    6.如何将字符串进行转化为datetime

    datetime.strptime(字符串数据,与字符串数据相匹配的格式字符串)

    重点就是两个字符串的数据必须是匹配的。而且必须给出格式字符串,这样比较麻烦,所以有了另一种方式:from dateutil.parser import parse

    Parse(要转化的数据字符串)

    7. 如何构造时间索引的时间序列

     

    另外一种方式为data=pd.DatetimeIndex([‘1/1/2000’,…………….])s=Series(数据,index=data)

    其索引方式与之前的索引方式相同

    8.索引方式:

    如果生成的序列过长,且有不同的年份,可以通过年份就可以截取同一年份的片段

    直接根据索引值进行切片

    根据时间字符串进行切片

    这些索引和切片的方法对Datetime一样有效

     

    9.日期范围的生成,一般可以用于索引,例如:pd.index_range(), 参数start=’’,为开始日期,end=’’,为结束日期,两者只能传入一个,还有periods=int 传入生成的个数   有时希望生成一组被规范化的午夜时间戳(时间为00:00:00),就需要加一个参数normalize=True

    以及参数freq,  

    10.时间序列的基础频率  freq可以等于什么?

    常见的有D 频率为1  B   只加工作日,跳开周六周末    H  小时    min分钟   S  秒数  U 毫秒   M 每月最后一个日历日    BM 每月最后一个工作日,MS每月第一个日历日,BMS每月第一个工作日

    W-MON等 指定的星期几(MON,TUEWED,THU,FRI,SAT,SUN)    WOM-1MON等  每月第一第二第三第四第五的星期几    Q-JAN等指定季度月份(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NO,DEC) 对应的为BQ-AN等  A-JAN等  每年指定月

    举个例子如何获得每月的第三个星期天的时间戳

    11,对时间戳或者数据用shift进行移位

    如下为一个用时间戳作为索引的数组,freq=’M‘,表示每月的最后一天

     

    当用的shift里只有一个整型的参数,那么时间戳不动,数据向下(大于零的整型),数据向上(小于零的整型),移动

     

    当出现两个参数,分别为一个整数,和一个freq,那么数据不动,原有的时间戳+整数*freq, 如下这个例子就是加2d

     12.关于时期,period的运算

    可应用p=pd.period(数据,freq=)构造一个时间段

    也可以类似于pd.date_range(开始数据,末端数据,freq=)来构建pd.period_range(开始数据,末端数据,freq=)作为数组的索引

    也有另一种类似于pd.DateIndex也有pd.PeriodIndex

  1. 时间点(时间戳)和时间段两者如何进行互换

    to_period(),参数默认为’M’,为每一个月的最后一个工作日

     To_timestamp(),因为为时间戳,因此需要具体到哪一天,参数为how=’start’,或者how=end’下面为一个例子:

    To_timestamp()参数how默认为start

  2. 如何进行频率转换,除了之前用到的shift,更为规范的为resample,它不仅可以用于频率的变化,还可以同时用how属性,将数据进行规整

    Resample的一些方法:

      Freq=用于存放要变化后的频率类型   how=规整数据的方法,比如’meamn,,‘first’,‘last’, ‘max’,’min’

    Axis=用于存放轴向    fill_method=用于存放填充个NAN值得方法

    Closed=’right’,在降采样的过程中,各时间段的哪一段是闭合的,‘right’或者‘left’默认为 ‘right’,用于管理数据的区间封闭  注意与label区分

    Limit=向前或者向后填充的允许填充的最大行数

    Kind= 变换完频率后的时间序列类型,可以为‘period’ 或者‘timestamp’,可以不给出

    Label=’right’  默认,用于管理时间序列的区间封闭问题

    Loffset=None,可以等于-1s,-2s10s

    由此可以知道,当升样时(即频率变高,会产生很多的nan值,因此,属性limit,fill_method,用的比较多,而降采样时,实质为timestamp变为period,因此closed  label用的比较多)看下面的例子

    首先构建一个时间序列索引数组

     

    将其进行降序:

    如果将closed=left,由于其是管理数据区间的,所以书记会发生变化

    label  是用于管理索引的

    Loffset  可以以秒或者毫秒的形式改变时间戳  下面的例子都加了1s

     

     

     

     

    12

     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值