十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如果你想获取 'A' 列的第 0 和第 2 个元素,你可以这样做:
创新互联是一家专业提供龙华企业网站建设,专注与成都做网站、网站建设、外贸营销网站建设、H5开发、小程序制作等业务。10年已为龙华众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
这也可以用 .iloc 获取,通过使用位置索引来选择内容
可以使用 .get_indexer 获取多个索引:
警告 :
对于包含一个或多个缺失标签的列表,使用 .loc 或 [] 将不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一个有效标签,就可以使用 .loc[list-of-labels]
但是现在,只要索引列表中存在缺失的标签将引发 KeyError 。推荐的替代方法是使用 .reindex() 。
例如
索引列表的标签都存在
先前的版本
但是,现在
索引标签列表中包含不存在的标签,使用 reindex
另外,如果你只想选择有效的键,可以使用下面的方法,同时保留了数据的 dtype
对于 .reindex() ,如果有重复的索引将会引发异常
通常,您可以将所需的标签与当前轴做交集,然后重新索引
但是,如果你的索引结果包含重复标签,还是会引发异常
使用 sample() 方法可以从 Series 或 DataFrame 中随机选择行或列。
该方法默认会对行进行采样,并接受一个特定的行数、列数,或数据子集。
默认情况下, sample 每行最多返回一次,但也可以使用 replace 参数进行替换采样
默认情况下,每一行被选中的概率相等,但是如果你想让每一行有不同的概率,你可以为 sample 函数的 weights 参数设置抽样权值
这些权重可以是一个列表、一个 NumPy 数组或一个 Series ,但它们的长度必须与你要抽样的对象相同。
缺失的值将被视为权重为零,并且不允许使用 inf 值。如果权重之和不等于 1 ,则将所有权重除以权重之和,将其重新归一化。例如
当应用于 DataFrame 时,您可以通过简单地将列名作为字符串传递给 weights 作为采样权重(前提是您要采样的是行而不是列)。
sample 还允许用户使用 axis 参数对列进行抽样。
最后,我们还可以使用 random_state 参数为 sample 的随机数生成器设置一个种子,它将接受一个整数(作为种子)或一个 NumPy RandomState 对象
当为该轴设置一个不存在的键时, .loc/[] 操作可以执行放大
在 Series 的情况下,这实际上是一个追加操作
可以通过 .loc 在任一轴上放大 DataFrame
这就像 DataFrame 的 append 操作
由于用 [] 做索引必须处理很多情况(单标签访问、分片、布尔索引等),所以需要一些开销来搞清楚你的意图
如果你只想访问一个标量值,最快的方法是使用 at 和 iat 方法,这两个方法在所有的数据结构上都实现了
与 loc 类似, at 提供了基于标签的标量查找,而 iat 提供了基于整数的查找,与 iloc 类似
同时,你也可以根据这些索引进行设置值
如果索引标签不存在,会放大数据
另一种常见的操作是使用布尔向量来过滤数据。运算符包括:
|(or) 、 (and) 、 ~ (not)
这些必须用括号来分组,因为默认情况下, Python 会将 df['A'] 2 df['B'] 3 这样的表达式评估为 df['A'] (2 df['B']) 3 ,而理想的执行顺序是 (df['A'] 2) (df['B'] 3)
使用一个布尔向量来索引一个 Series ,其工作原理和 NumPy ndarray 一样。
您可以使用一个与 DataFrame 的索引长度相同的布尔向量从 DataFrame 中选择行
列表推导式和 Series 的 map 函数可用于产生更复杂的标准
我们可以使用布尔向量结合其他索引表达式,在多个轴上索引
iloc 支持两种布尔索引。如果索引器是一个布尔值 Series ,就会引发异常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正确的。但是 df.iloc[s,1] 会引发 ValueError 。
#python中的pandas库主要有DataFrame和Series类(面向对象的的语言更愿意叫类) DataFrame也就是
#数据框(主要是借鉴R里面的data.frame),Series也就是序列 ,pandas底层是c写的 性能很棒,有大神
#做过测试 处理亿级别的数据没问题,起性能可以跟同等配置的sas媲美
#DataFrame索引 df.loc是标签选取操作,df.iloc是位置切片操作
print(df[['row_names','Rape']])
df['行标签']
df.loc[行标签,列标签]
print(df.loc[0:2,['Rape','Murder']])
df.iloc[行位置,列位置]
df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值
df.iloc[0,2],:]#选取第一行及第三行的数据
df.iloc[0:2,:]#选取第一行到第三行(不包含)的数据
df.iloc[:,1]#选取所有记录的第一列的值,返回的为一个Series
df.iloc[1,:]#选取第一行数据,返回的为一个Series
print(df.ix[1,1]) # 更广义的切片方式是使用.ix,它自动根据你给到的索引类型判断是使用位置还是标签进行切片
print(df.ix[0:2])
#DataFrame根据条件选取子集 类似于sas里面if、where ,R里面的subset之类的函数
df[df.Murder13]
df[(df.Murder10)(df.Rape30)]
df[df.sex==u'男']
#重命名 相当于sas里面的rename R软件中reshape包的中的rename
df.rename(columns={'A':'A_rename'})
df.rename(index={1:'other'})
#删除列 相当于sas中的drop R软件中的test['col']-null
df.drop(['a','b'],axis=1) or del df[['a','b']]
#排序 相当于sas里面的sort R软件里面的df[order(x),]
df.sort(columns='C') #行排序 y轴上
df.sort(axis=1) #各个列之间位置排序 x轴上
#数据描述 相当于sas中proc menas R软件里面的summary
df.describe()
#生成新的一列 跟R里面有点类似
df['new_columns']=df['columns']
df.insert(1,'new_columns',df['B']) #效率最高
df.join(Series(df['columns'],name='new_columns'))
#列上面的追加 相当于sas中的append R里面cbind()
df.append(df1,ignore_index=True)
pd.concat([df,df1],ignore_index=True)
#最经典的join 跟sas和R里面的merge类似 跟sql里面的各种join对照
merge()
#删除重行 跟sas里面nodukey R里面的which(!duplicated(df[])类似
df.drop_duplicated()
#获取最大值 最小值的位置 有点类似矩阵里面的方法
df.idxmin(axis=0 ) df.idxmax(axis=1) 0和1有什么不同 自己摸索去
#读取外部数据跟sas的proc import R里面的read.csv等类似
read_excel() read_csv() read_hdf5() 等
与之相反的是df.to_excel() df.to_ecv()
#缺失值处理 个人觉得pandas中缺失值处理比sas和R方便多了
df.fillna(9999) #用9999填充
#链接数据库 不多说 pandas里面主要用 MySQLdb
import MySQLdb
conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="mysql",use_unicode=True,charset="utf8")
read_sql() #很经典
#写数据进数据库
df.to_sql('hbase_visit',con, flavor="mysql", if_exists='replace', index=False)
#groupby 跟sas里面的中的by R软件中dplyr包中的group_by sql里面的group by功能是一样的 这里不多说
#求哑变量
dumiper=pd.get_dummies(df['key'])
df['key'].join(dumpier)
#透视表 和交叉表 跟sas里面的proc freq步类似 R里面的aggrate和cast函数类似
pd.pivot_table()
pd.crosstab()
#聚合函数经常跟group by一起组合用
df.groupby('sex').agg({'height':['mean','sum'],'weight':['count','min']})
#数据查询过滤
test.query("0.2
将STK_ID中的值过滤出来
stk_list = ['600809','600141','600329']中的全部记录过滤出来,命令是:rpt[rpt['STK_ID'].isin(stk_list)].
将dataframe中,某列进行清洗的命令
删除换行符:misc['product_desc'] = misc['product_desc'].str.replace('\n', '')
删除字符串前后空格:df["Make"] = df["Make"].map(str.strip)
如果用模糊匹配的话,命令是:
rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')]
对dataframe中元素,进行类型转换
df['2nd'] = df['2nd'].str.replace(',','').astype(int) df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64)
#时间变换 主要依赖于datemie 和time两个包
#其他的一些技巧
df2[df2['A'].map(lambda x:x.startswith('61'))] #筛选出以61开头的数据
df2["Author"].str.replace(".+", "").head() #replace(".+", "")表示将字符串中以””开头;以””结束的任意子串替换为空字符串
commits = df2["Name"].head(15)
print commits.unique(), len(commits.unique()) #获的NAME的不同个数,类似于sql里面count(distinct name)
#pandas中最核心 最经典的函数apply map applymap
PIL有如下几个模块:Image模块、ImageChops模块、ImageCrackCode模块、ImageDraw模块、ImageEnhance模块、ImageFile模块、ImageFileIO模块、ImageFilter模块、ImageFont模块、ImageGrab模块、ImageOps模块、ImagePath模块、ImageSequence模块、ImageStat模块、ImageTk模块、ImageWin模块、PSDraw模块
啊啊啊啊怎么这么多模块啊~~~!!!!
别担心我为你一一讲解
Image模块提供了一个相同名称的类,即image类,用于表示PIL图像。
Image模块是PIL中最重要的模块 ,比如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等。
Image模块的使用如下:
ImageChops模块包含一些算术图形操作,这些操作可用于诸多目的,比如图像特效,图像组合,算法绘图等等,通道操作只用于8位图像。
ImageChops模块的使用如下:
由于图像im_dup是im的复制过来的,所以它们的差为0,图像im_diff显示时为黑图。
ImageCrackCode模块允许用户检测和测量图像的各种特性。 这个模块只存在于PIL Plus包中。
因为我目前安装的PIL中没有包含这个模块。所以就不详细介绍了
ImageDraw模块为image对象提供了基本的图形处理功能。 例如,它可以创建新图像,注释或润饰已存在图像,为web应用实时产生各种图形。
ImageDraw模块的使用如下:
在del draw前后显示出来的图像im是完全一样的,都是在原有图像上画了两条对角线。
原谅我的报错
ImageEnhance模块包括一些用于图像增强的类。它们分别为 Color类、Brightness类、Contrast类和Sharpness类。
ImageEnhance模块的使用如下:
图像im0的亮度为图像im的一半。
ImageFile模块为图像打开和保存功能提供了相关支持功能。另外,它提供了一个Parser类,这个类可以一块一块地对一张图像进行解码(例如,网络联接中接收一张图像)。这个类的接口与标准的sgmllib和xmllib模块的接口一样。
ImageFile模块的使用如下:
因为所打开图像大小大于1024个byte,所以报错:图像不完整。
所以大家想看的可以自行去找一个小一点的图看一下
ImageFileIO模块用于从一个socket或者其他流设备中读取一张图像。 不赞成使用这个模块。 在新的code中将使用ImageFile模块的Parser类来代替它。
ImageFilter模块包括各种滤波器的预定义集合,与Image类的filter方法一起使用。该模块包含这些图像增强的滤器:BLUR,CONTOUR,DETAIL,EDGE_ENHANCE,EDGE_ENHANCE_MORE,EMBOSS,FIND_EDGES,SMOOTH,SMOOTH_MORE和SHARPEN。
ImageFilter模块的使用如下:
ImageFont模块定义了一个同名的类,即ImageFont类。这个类的实例中存储着bitmap字体,需要与ImageDraw类的text方法一起使用。
PIL使用自己的字体文件格式存储bitmap字体。用户可以使用pilfont工具包将BDF和PCF字体描述器(Xwindow字体格式)转换为这种格式。
PIL Plus包中才会支持矢量字体。
ImageGrab模块用于将屏幕上的内容拷贝到一个PIL图像内存中。 当前的版本只在windows操作系统上可以工作。
ImageGrab模块的使用如下:
图像im显示出笔记本当前的窗口内容,就是类似于截图的工具
ImageOps模块包括一些“ready-made”图像处理操作。 它可以完成直方图均衡、裁剪、量化、镜像等操作 。大多数操作只工作在L和RGB图像上。
ImageOps模块的使用如下:
图像im_flip为图像im垂直方向的镜像。
ImagePath模块用于存储和操作二维向量数据。Path对象将被传递到ImageDraw模块的方法中。
ImagePath模块的使用如下:
ImageSequence模块包括一个wrapper类,它为图像序列中每一帧提供了迭代器。
ImageSequence模块的使用如下:
后面两次show()函数调用,分别显示第1张和第11张图像。
ImageStat模块计算一张图像或者一张图像的一个区域的全局统计值。
ImageStat模块的使用如下:
ImageTk模块用于创建和修改BitmapImage和PhotoImage对象中的Tkinter。
ImageTk模块的使用如下:
这个是我一直不太懂的有没有大佬能帮我解决一下在线等~急!
PSDraw模块为Postscript打印机提供基本的打印支持。用户可以通过这个模块打印字体,图形和图像。
PIL中所涉及的基本概念有如下几个: 通道(bands)、模式(mode)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters)。
每张图片都是由一个或者多个数据通道构成。PIL允许在单张图片中合成相同维数和深度的多个通道。
以RGB图像为例,每张图片都是由三个数据通道构成,分别为R、G和B通道。而对于灰度图像,则只有一个通道。
对于一张图片的通道数量和名称,可以通过getbands()方法来获取。getbands()方法是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每一个通道的名称。
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
getbands()方法的使用如下:
图像的模式定义了图像的类型和像素的位宽。当前支持如下模式:
1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其他模式。
I:32位整型像素。
F:32位浮点型像素。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。
可以通过mode属性读取图像的模式。其返回值是包括上述模式的字符串。
mode 属性 的使用如下:
通过size属性可以获取图片的尺寸。这是一个二元组,包含水平和垂直方向上的像素数。
mode属性的使用如下:
PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。
坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如:一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。
调色板模式 ("P")使用一个颜色调色板为每个像素定义具体的颜色值
使用info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息需要处理取决于文件格式。
info属性的使用如下:
对于将多个输入像素映射为一个输出像素的几何操作,PIL提供了4个不同的采样滤波器:
NEAREST:最近滤波。 从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。
BILINEAR:双线性滤波。 在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
BICUBIC:双立方滤波。 在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
ANTIALIAS:平滑滤波。 这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。
注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样 (例如,将一个大的图像转换为小图) 时唯一正确的滤波器。 BILIEAR和BICUBIC滤波器使用固定的输入模板 ,用于固定比例的几何变换和上采样是最好的。Image模块中的方法resize()和thumbnail()用到了滤波器。
resize()方法的定义为:resize(size, filter=None)= image
resize()方法的使用如下:
对参数filter不赋值的话,resize()方法默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:
thumbnail ()方法的定义为:im.thumbnail(size, filter=None)
thumbnail ()方法的使用如下:
这里需要说明的是,方法thumbnail()需要保持宽高比,对于size=(200,200)的输入参数,其最终的缩略图尺寸为(182, 200)。
对参数filter不赋值的话,方法thumbnail()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:
Python-for-data-重新采样和频率转换
重新采样指的是将时间序列从一个频率转换到另一个频率的过程。
但是也并不是所有的采样方式都是属于上面的两种
pandas中使用resample方法来实现频率转换,下面是resample方法的参数详解:
将数据聚合到一个规则的低频上,例如将时间转换为每个月,"M"或者"BM",将数据分成一个月的时间间隔。
每个间隔是半闭合的,一个数据只能属于一个时间间隔。时间间隔的并集必须是整个时间帧
默认情况下,左箱体边界是包含的。00:00的值是00:00到00:05间隔内的值
产生的时间序列按照每个箱体左边的时间戳被标记。
传递span class="mark"label="right"/span可以使用右箱体边界标记时间序列
向loffset参数传递字符串或者日期偏置
在金融数据中,为每个数据桶计算4个值是常见的问题:
通过span class="girk"ohlc聚合函数/span能够得到四种聚合值列的DF数据
低频转到高频的时候会形成缺失值
ffill() :使用前面的值填充, limit 限制填充的次数
downsample函数:可以通过下采样将原来的数据提取出来。 dataTx=rcosflt(dataTx1,fs/8,fs,'filter',num);表示将数据dataTx进行8倍过采样的滚降升余弦滤波,过采样增加的点数为2*delay*(fs/fd),其中在原数据的开头和结尾各一半, dataTx=rcosfl...