同意其在几何类型上进展空间操作,DataFrame类具有许多方法

译自GeoPandas 0.1.0
文档
(原版译著,有错误欢迎调换,转发请表明)

DataFrame类具有许多办法,下边做用法的牵线和举例。

  GeoPandas是一个开源项目,它的目标是驱动在Python下更便宜的处理地理空间数据。GeoPandas扩张了pandas的数据类型,允许其在几何类型上进展空中操作。几何操作由 shapely施行。 GeoPandas进一步依靠于 fiona进展文件存取和 descartes ,matplotlib 进行绘图。

pandas.DataFrame学习类别2——函数方法(1)

描述

GeoPandas
的指标是在Python下更便于处理地理数据。它结合了pandas和shaply的成效,提供在pandas下的长空操作和shapel下高层次的处理多几何构型的接口。GeoPandas
允许你很不难的用Python实行操作,不然的话,你将只好用二个空间数据库去处理,如PostGIS。

1.abs(),重回DataFrame每种数值的相对化值,前提是有所因素均为数值型

安装

作者近来的意识版本是0.1,安装,能够动用pip或easy_install:

 pip install geopandas

你也足以通过克隆 GitHub上的库房去安装新型的开销版本,命令脚本如下:

git clone https://github.com/geopandas/geopandas.git
cd geopandas
python setup.py install

相同也足以在PyPI上设置新型的可用开发版本,使用pip,加上–pre安装1.4照旧更高的版本,大概直接动用pip从GitHub仓库中设置:

pip install git+git://github.com/geopandas/geopandas.git
 1 import pandas as pd
 2 import numpy as np
 3 
 4 df=pd.read_excel('南京银行.xlsx',index_col='Date')
 5 df1=df[:5]
 6 df1.iat[0,1]=-df1.iat[0,1]
 7 df1
 8             Open  High   Low  Close  Turnover    Volume
 9 Date                                                   
10 2017-09-15  8.06 -8.08  8.03   8.04    195.43  24272800
11 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
12 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
13 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
14 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600
15 
16 df1.abs()
17             Open  High   Low  Close  Turnover      Volume
18 Date                                                     
19 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800.0
20 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600.0
21 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100.0
22 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700.0
23 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600.0

依赖

支持Python版本2.6,2.7,和3.2+

依赖包:

绘制的话会用到此外的片段包:

2.add(otheraxis=’columns’level=Nonefill_value=None) 将有个别连串或表中的成分与本表中的成分相加,私下认可匹配列成分

测试

从源目录下运维当前的测试集,在命令行运转:

nosetests -v

测试活动运转在GitHub库中具有的交给业务上,包蕴在Travis
CI
的push请求。

 1 ar1=[8.1,8.2,8.0,8.15,200.00,32000000]
 2 cl1=['Open','High','Low','Close','Turnover','Volume']
 3 se1=pd.Series(data=ar1,index=cl1)
 4 se1
 5 
 6 Open               8.10
 7 High               8.20
 8 Low                8.00
 9 Close              8.15
10 Trunover         200.00
11 Volume      32000000.00
12 dtype: float64
13 
14 df1.add(se1)
15 Open   High    Low  Close  Turnover      Volume
16 Date                                                        
17 2017-09-15  16.16   0.12  16.03  16.19    395.43  56272800.0
18 2017-09-18  16.15  16.33  16.03  16.21    400.76  56867600.0
19 2017-09-19  16.13  16.26  15.94  16.15    633.76  86253100.0
20 2017-09-20  16.07  16.26  15.95  16.18    519.94  71909700.0
21 2017-09-21  16.12  16.30  15.99  16.19    441.94  62056600.0

1 df1.add(df1)
2 
3              Open   High    Low  Close  Turnover     Volume
4 Date                                                       
5 2017-09-15  16.12 -16.16  16.06  16.08    390.86   48545600
6 2017-09-18  16.10  16.26  16.06  16.12    401.52   49735200
7 2017-09-19  16.06  16.12  15.88  16.00    867.52  108506200
8 2017-09-20  15.94  16.12  15.90  16.06    639.88   79819400
9 2017-09-21  16.04  16.20  15.98  16.08    483.88   60113200

GeoPandas 使用手册

GeoPandas完成了八个第二的数据结构,GeoSeries和GeoDataFrame。它们分别是pandas中Series和DataFrame的子类。

3.add_prefix()和add_suffix()为列名添加前缀或后缀

GeoSeries

1个GeoSeries包涵二个几何图形的队列。

GeoSeries类达成了大约全部的Shapely对象的性质和格局。在选拔GeoSeries时,它将应用于队列中有所几何图形的每一个要素。二元操作能够在五个GeoSeries对象时期展开,那种情况下二元操作将运用于每一个因素。那多个体系将按匹配的目录进行对于操作。二元操作也足以行使于单个几何,此时二元操作将对该几何类别的种种成分进行。在上述二种状态下,操作将会回到Series或许GeoSeries对象。

在GeoSeries对象中,以下Shapely对象的办法和质量是能够运用的:

GeoSeries.area

归来三个Series,它含有GeoSeries中各种几何的面积。

GeoSeries.bounds

回到3个DataFrame,它涵盖每一个几何的边界,用列值minxminymaxxmaxy来表示。

GeoSeries.length

归来多少个Series,它包蕴每一个几何的长度。

GeoSeries.geom_type

回到一个字符串的Series,字符串钦赐每一个对象的几何类型。

GeoSeries.distance(``other)

回去一个Series,它富含与其余GeoSeries对象(各样成分)或几何对象的矮小距离。

GeoSeries.representative_point()

返回所有点的一个GeoSeries(经简易计算),这些点必须保证在每个几何的内部。

GeoSeries.exterior

返回线环(LinearRings)的一个GeoSeries,它表示GeoSeries中每个多边形的外边界。

GeoSeries.interior

返回内部环序列的一个GeoSeries,它表示GeoSeries中每个多边形的内部环。

 1 df1.add_prefix('list')
 2 
 3             listOpen  listHigh  listLow  listClose  listTurnover  listVolume
 4 Date                                                                        
 5 2017-09-15      8.06      8.08     8.03       8.04        195.43    24272800
 6 2017-09-18      8.05      8.13     8.03       8.06        200.76    24867600
 7 2017-09-19      8.03      8.06     7.94       8.00        433.76    54253100
 8 2017-09-20      7.97      8.06     7.95       8.03        319.94    39909700
 9 2017-09-21      8.02      8.10     7.99       8.04        241.94    30056600
10 
11 df1.add_suffix('list')
12 
13             Openlist  Highlist  Lowlist  Closelist  Turnoverlist  Volumelist
14 Date                                                                        
15 2017-09-15      8.06      8.08     8.03       8.04        195.43    24272800
16 2017-09-18      8.05      8.13     8.03       8.06        200.76    24867600
17 2017-09-19      8.03      8.06     7.94       8.00        433.76    54253100
18 2017-09-20      7.97      8.06     7.95       8.03        319.94    39909700
19 2017-09-21      8.02      8.10     7.99       8.04        241.94    30056600

一元谓词操作

GeoSeries.is_empty

返回一个布尔型的Series,对于一个空的几何图形,该值就为True。

GeoSeries.is_ring

返回一个布尔型的Series,对于闭合的要素,该值就为True。

GeoSeries.is_simple

返回一个布尔型的Series,如果几何体自身不交叉,该值就为True(仅对线串--LineStrings和线环--LineRings有意义)。

GeoSeries.is_valid

返回一个布尔型的Series,如果几何体是有效的,该值就为True。

4.agg(funcaxis=0\args**kwargs*),合计运算,常用的函数有min,max,prod,mean,std,var,median等

二元谓词操作

GeoSeries.almost_equals(other**[,decimal=6])**“

返回一个布尔型的Series对象,如果在指定的小数位精度下,每个对象所有点与其他对象大致相等,该值就为True(可见equals())。

``GeoSeries.contains(other**)**

返回一个布尔型的Series,如果每个对象的内部包含其他对象的内部和边界,并且它们的边界不相接,该值为True。

GeoSeries.crosses(other**)“**

返回一个布尔型的Series,如果每个对象的内部与其他对象的内部相交但不包含,并且相交的部分小于这两个相交对象自身,该值为True。

GeoSeries.disjoint(other**)“**

返回一个布尔型的Series,如果每个对象的边界和内部与其他对象的边界和内部都不相交,该值为True。

GeoSeries.equals(other**)“**

返回一个布尔型的Series,如果几何对象集合的边界,内部,外部都与其他几何对象一样,该值为True。

GeoSeries.intersects(other**)“**

返回一个布尔型的Series,如果每个对象的边界和内部以其它任何形式与其他对象相交,该值为True。

GeoSeries.touches(other**)“**

返回一个布尔型的Series,如果对象与其他对象至少有一个点相同,且它们的内部任何部分都不相交,该值为True。

GeoSeries.within(other**)“**

返回一个布尔型的Series, 即使每一种对象的境界和里面只与别的对象的内部相交(不包罗边界和表面),该值为True(与contains()方法相反)。

 1 所有列只做一种运算
 2 df1.agg(sum)
 3 Open        4.013000e+01
 4 High        4.043000e+01
 5 Low         3.994000e+01
 6 Close       4.017000e+01
 7 Turnover    1.391830e+03
 8 Volume      1.733598e+08
 9 dtype: float64
10 
11 所有列做两种运算
12 df1.agg(['sum','min'])
13       Open   High    Low  Close  Turnover     Volume
14 sum  40.13  40.43  39.94  40.17   1391.83  173359800
15 min   7.97   8.06   7.94   8.00    195.43   24272800
16 
17 不同列做不同运算
18 df1.agg({'Open':['sum','min'],'Close':['sum','max']})
19      Close   Open
20 max   8.06    NaN
21 min    NaN   7.97
22 sum  40.17  40.13

集聚理论方法

GeoSeries.boundary

返回一个低维对象每个几何体的边界集合的GeoSeries。

GeoSeries.centroid

返回表示几何重心点的一个GeoSeries。

GeoSeries.difference(other)

返回每个几何体不在其他对象中的点的一个GeoSeries。

GeoSeries.intersection(other)

返回每个几何对象与其他几何对象相交的一个GeoSeries。

GeoSeries.symmetric_difference(other)

返回一个GeoSeries,它表示每个几何对象中的点不在其他几何对象中,同时其他几何对象中的点也不在这个几何对象中的部分(注:对称差异)。

GeoSeries.union(other)

返回每个几何对象与其他几何对象联合的一个GeoSeries。

5.align(),DataFrame与Series或DataFrame之间延续运算,常用的有内联,外联,中国左翼散文家联盟,右联

构造方法(*且**这样*

GeoSeries.buffer(distance,resolution=16)

返回几何图形的一个GeoSeries,他表示每个几何对象在给定的距离内的所有点。

GeoSeries.convex_hull

当对象的点多于三个的时候,``返回表示每个对象所有点的最小凸包多边形的一个GeoSeries;只有两个点的时候,凸包变成了线串;只有一个点的时候,就是当个点。

GeoSeries.envelope

返回几何图形的一个GeoSeries,它表示包含其它对象的点或者最小矩形(边平行于坐标轴)。注:即包络线

GeoSeries.simplify(tolerance,preserve_topology=True)

返回包含每个对象简化表示的一个GeoSeries。

澳门永利娱乐总站 1澳门永利娱乐总站 2

仿射变换

GeoSeries.rotate(self,angle,origin='center',use_radians=False)

旋转GeoSeries的坐标。

GeoSeries.scale(self,xfact=1.0,yfact=1.0,zfact=1.0,origin='center')

沿着(x,y,z)上各个方向的尺寸缩放几何图形。

GeoSeries.skew(self,angle,origin='center',use_radians=False)

按角度沿着x和y维剪切/倾斜几何图形。

GeoSeries.translate(self,angle,origin='center',use_radians=False)

转变GeoSeries的坐标。

 1 df2=df[3:5]
 2 df2
 3 Out[68]: 
 4             Open  High   Low  Close  Turnover    Volume
 5 Date                                                   
 6 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
 7 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600
 8 
 9 df1.align(df2,join='inner') #返回的为元组类型对象
10 (            Open  High   Low  Close  Turnover    Volume
11  Date                                                   
12  2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
13  2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600,
14              Open  High   Low  Close  Turnover    Volume
15  Date                                                   
16  2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
17  2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600)
18 
19 df1.align(df2,join='left')
20 Out[69]: 
21 (            Open  High   Low  Close  Turnover    Volume
22  Date                                                   
23  2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
24  2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
25  2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
26  2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
27  2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600,
28              Open  High   Low  Close  Turnover      Volume
29  Date                                                     
30  2017-09-15   NaN   NaN   NaN    NaN       NaN         NaN
31  2017-09-18   NaN   NaN   NaN    NaN       NaN         NaN
32  2017-09-19   NaN   NaN   NaN    NaN       NaN         NaN
33  2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700.0
34  2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600.0)
35 
36 df1.align(df2,join='left')[0]
37 Out[70]: 
38             Open  High   Low  Close  Turnover    Volume
39 Date                                                   
40 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
41 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
42 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
43 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
44 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600

会见方法

GeoSeries.unary_union

返回GeoSeries中所有几何体联合的一个几何体。

其余,以下的不二法门也完结了:

GeoSeries.from_file()

`从文件中“加载任何能被fiona识其余格式。“`

GeoSeries.to_crs(crs=None,epsg=None)

`转换GeoSeries中的几何图形到分裂的坐标参考系统。当前GeoSeries的crs属性必须被安装。crs属性须要被内定以用来出口,或是用字典格局可能用EPSG编码格局。“`

  那种措施将改变全数目的中的全体点。它并未概念或转移整个几何图形。全部连接点的片段在脚下的黑影中被认为是线条,而不是测地线。对象超秦国际日期变更线(或别的投影边界)是不被允许的。

GeoSeries.plot(colormap='Set1',alpha=0.5,axes=None)

进行GeoSeries中几何图形的绘制。colormap可以被matplotlib认可,但是推荐诸如Accent,Dark2,Paired,Pastel1,Pastel2,Set1,Set2,Set3这些离散的colormap。这些都封装在plot_series()函数中。

GeoSeries.total_bounds

返回一个元组,包含整个series边界的minx,miny,maxx,maxy值。包含在序列中的几何体的边界,可以参照GeoSeries.bounds。

pandas中Series对象的格局也是足以用的,纵然不是富有的都能适用于几何对象,并且有的结出可能回到Series而不是Geo塞里es。在GeoSeries中特别完结了copy(), align(), isnull()fillna()方法,它们是可以正常使用的。

View Code

GeoDataFrame

一个GeoDataFrame是一个列表数据结构,它包含一个叫做包含geometry的列,这个geometry包含一个GeoSeries。

明日,GeoDataFrame达成了以下办法:

类方法 GeoDataFrame.``from_file(filename, **kwargs)**“**

`从文件中加载可以被fiona识别的任何格式的2个GeoDataFrame。参见read_file()。“`

类方法GeoDataFrame.``from_postgis(sql,con,geom_col='geom',crs=None,index_col=None,coerce_float=True,params=None)**“**

`从PostGIS数据库文件中加载GeoDataFrame。“`

GeoSeries.to_crs(crs=None,epsg=None,inplace=False)**“**

`转换GeoDataFrame的geometry列中的全数几何图形到任何坐标参考系统。当前GeoSeries的crs属性必须被设置。crs属性必要被钦点以用于出口,或是用字典方式或许用EPSG编码格局。要是inplace=True,在此时此刻的dataframe中geometry列将被替换,不然将回到三个新的GeoDataFrame。“`

  那种办法将转移全数指标中的全部点。它从不概念或转换整个几何图形。全体连接点的一对在此时此刻的影子中被认为是线条,而不是测地线。对象抢先国际日期变更线(或任何投影边界)是不被允许的。

GeoSeries.to_file(filename,driver=”ESRI
Shapefile”,**kwargs)**“**

将GeoDataFrame写入文件。默认情况下,写成ESRI的shapefile格式。但是通过Fiona,任何OGR数据源也被支持写入。**kwargs被传给Fiona驱动器。

GeoSeries.to_json(**kwargs)**“**

`将“GeoDataFrame以字符串的不二法门意味着为GeoJSON对象回来。“`

GeoSeries.plot(column=None,colormap=None,alpha=0.5,categorical=False,legend=False,axes=None)**“**

`绘制GeoDataFrame中几何图形。假如列参数给定,颜色依照那列的值绘制,否则在geometry列调用GeoSeries.plot()函数。都封装在plot_dataframe()函数中。“`

不无pandas中DataFrane对象的措施也是能够用的,纵然可能某些针对geometry列正当的操作没有意义也也许不回来GeoDataFrame。

6.all()和any(),判断选定的DataFrame中的成分是还是不是全不为空或是或不是私自二个因素不为空,重回值为Boolean类型

Geopandas函数

GeoSeries.geocode.``geocode(strings,provider=’googlev3′,**kwargs)**“**

对字符串列表进行地理编码,返回一个GeoDataFrame,它包含在geometry列生成的点。可用的提供者有googlev3,bing,google,yahoo,mapquest和``openmapquest,**kwargs将作为参数传递给适当的地理编码器。

  须求选择geopy。请咨询选取的提供商的服务条款。

澳门永利娱乐总站 3澳门永利娱乐总站 4

示例

>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = GeoSeries([p1, p2, p3])
>>> g
0    POLYGON ((0.0000000000000000 0.000000000000000...
1    POLYGON ((0.0000000000000000 0.000000000000000...
2    POLYGON ((2.0000000000000000 0.000000000000000...
dtype: object

 澳门永利娱乐总站 5

一部分地理操作重返标准的pandas对象。一个GeoSeries对象的area属性将会回到1个pandas.Series,它蕴涵GeoSeries中每一项的面积.

>>> print g.area
0    0.5
1    1.0
2    1.0
dtype: float64

其余操作重返GeoPandas对象:

>>> g.buffer(0.5)
Out[15]:
0    POLYGON ((-0.3535533905932737 0.35355339059327...
1    POLYGON ((-0.5000000000000000 0.00000000000000...
2    POLYGON ((1.5000000000000000 0.000000000000000...
dtype: object

澳门永利娱乐总站 6

GeoPandas对象能后绘制这一个图像。GeoPandas 使用descartes ,用matplotlib库绘制。为生育大家的GeoSeries图形,使用以下命令:

>>> g.plot()

GeoPandas也兑现了代表构造函数,能够读取被fiona识假的格式。为读取包涵London市集文件(file
containing the boroughs of New York
City
):

>>> boros = GeoDataFrame.from_file('nybb.shp')
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort()
>>> boros
               BoroName    Shape_Area     Shape_Leng  \
BoroCode
1             Manhattan  6.364422e+08  358532.956418
2                 Bronx  1.186804e+09  464517.890553
3              Brooklyn  1.959432e+09  726568.946340
4                Queens  3.049947e+09  861038.479299
5         Staten Island  1.623853e+09  330385.036974

                                                   geometry
BoroCode
1         (POLYGON ((981219.0557861328125000 188655.3157...
2         (POLYGON ((1012821.8057861328125000 229228.264...
3         (POLYGON ((1021176.4790039062500000 151374.796...
4         (POLYGON ((1029606.0765991210937500 156073.814...
5         (POLYGON ((970217.0223999023437500 145643.3322...

澳门永利娱乐总站 7

>>> boros['geometry'].convex_hull
0    POLYGON ((915517.6877458114176989 120121.88125...
1    POLYGON ((1000721.5317993164062500 136681.7761...
2    POLYGON ((988872.8212280273437500 146772.03179...
3    POLYGON ((977855.4451904296875000 188082.32238...
4    POLYGON ((1017949.9776000976562500 225426.8845...
dtype: object

澳门永利娱乐总站 8

为展现更复杂的操作,大家生育包括三千个随机点的3个GeoSeries:

>>> from shapely.geometry import Point
>>> xmin, xmax, ymin, ymax = 900000, 1080000, 120000, 280000
>>> xc = (xmax - xmin) * np.random.random(2000) + xmin
>>> yc = (ymax - ymin) * np.random.random(2000) + ymin
>>> pts = GeoSeries([Point(x, y) for x, y in zip(xc, yc)])

当今在种种点周围按一定的半径绘制圆:

>>> circles = pts.buffer(2000)

大家得以应用以下命令使那些圆合并成单个shapely的MutiPolygon几何对象:

>>> mp = circles.unary_union

领取在各类区内的上一步生成的几何对象的一部分,能够行使:

>>> holes = boros['geometry'].intersection(mp)

澳门永利娱乐总站 9

还要能够取得区域内这几个有个别以外的任何一些面积:

>>> boros_with_holes = boros['geometry'].difference(mp)

澳门永利娱乐总站 10

留神,那一个能够简化一点,因为geometry能够在GeoDataFrame中作为质量获得,intersection和difference方法分别是由“&”和“-”操作符完毕的。例如,后者可以简简单单的意味为boros.geometry
-mp。

测算每种区中这几个由点缓冲生成的holes的比重,是很不难形成的

>>> holes.area / boros.geometry.area
BoroCode
1           0.602015
2           0.523457
3           0.585901
4           0.577020
5           0.559507
dtype: float64

 

 1 df1.all(axis=0)
 2 Out[72]: 
 3 Open        True
 4 High        True
 5 Low         True
 6 Close       True
 7 Turnover    True
 8 Volume      True
 9 dtype: bool
10 
11 df1.all(axis=1)
12 Out[73]: 
13 Date
14 2017-09-15    True
15 2017-09-18    True
16 2017-09-19    True
17 2017-09-20    True
18 2017-09-21    True
19 dtype: bool
20 
21 df1.any()
22 Out[74]: 
23 Open        True
24 High        True
25 Low         True
26 Close       True
27 Turnover    True
28 Volume      True
29 dtype: bool

View Code

7.append(),在此表格底部添加其他对象的行,重回三个新的靶子

 1 df2=df[5:7]
 2 df2
 3 Out[93]: 
 4             Open  High   Low  Close  Turnover    Volume
 5 Date                                                   
 6 2017-09-22  8.01  8.10  8.00   8.08    300.13  37212200
 7 2017-09-25  8.06  8.07  7.97   7.99    262.30  32754500
 8 
 9 df1.append(df2)
10 Out[94]: 
11             Open  High   Low  Close  Turnover    Volume
12 Date                                                   
13 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
14 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
15 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
16 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
17 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600
18 2017-09-22  8.01  8.10  8.00   8.08    300.13  37212200
19 2017-09-25  8.06  8.07  7.97   7.99    262.30  32754500

此间介绍3个没用的和飞跃的树立3个DataFrame的主意

 1 #略低效的方法
 2 >>> df = pd.DataFrame(columns=['A'])
 3 >>> for i in range(5):
 4 ...     df = df.append({'A'}: i}, ignore_index=True)
 5 >>> df
 6    A
 7 0  0
 8 1  1
 9 2  2
10 3  3
11 4  4
12 
13 #更高效的方法
14 >>> pd.concat([pd.DataFrame([i], columns=['A']) for i in range(5)],
15 ...           ignore_index=True)
16    A
17 0  0
18 1  1
19 2  2
20 3  3
21 4  4

8.apply(funcaxis=0broadcast=Falseraw=Falsereduce=Noneargs=()\*kwds*) 对于DataFrame的行或列应用有个别函数

澳门永利娱乐总站 11澳门永利娱乐总站 12

 1 df1.apply(np.mean,axis=0)
 2 Out[96]: 
 3 Open        8.026000e+00
 4 High        8.086000e+00
 5 Low         7.988000e+00
 6 Close       8.034000e+00
 7 Turnover    2.783660e+02
 8 Volume      3.467196e+07
 9 dtype: float64
10 
11 df1.apply(np.max,axis=1)
12 Out[97]: 
13 Date
14 2017-09-15    24272800.0
15 2017-09-18    24867600.0
16 2017-09-19    54253100.0
17 2017-09-20    39909700.0
18 2017-09-21    30056600.0
19 dtype: float64

View Code

9.applymap(func) 对DataFrame的因素运用有个别函数

1 df1.applymap(lambda x:'%.3f' %x)
2 Out[100]: 
3              Open   High    Low  Close Turnover        Volume
4 Date                                                         
5 2017-09-15  8.060  8.080  8.030  8.040  195.430  24272800.000
6 2017-09-18  8.050  8.130  8.030  8.060  200.760  24867600.000
7 2017-09-19  8.030  8.060  7.940  8.000  433.760  54253100.000
8 2017-09-20  7.970  8.060  7.950  8.030  319.940  39909700.000
9 2017-09-21  8.020  8.100  7.990  8.040  241.940  30056600.000

10.as_blocks()和as_matrix(),分别用于将DataFrame转化为以数据类型为键值的字典和将DataFrame转化为二维数组

澳门永利娱乐总站 13澳门永利娱乐总站 14

 1 df1.as_blocks()
 2 Out[105]: 
 3 {'float64':             Open  High   Low  Close  Turnover
 4  Date                                         
 5  2017-09-15  8.06  8.08  8.03   8.04    195.43
 6  2017-09-18  8.05  8.13  8.03   8.06    200.76
 7  2017-09-19  8.03  8.06  7.94   8.00    433.76
 8  2017-09-20  7.97  8.06  7.95   8.03    319.94
 9  2017-09-21  8.02  8.10  7.99   8.04    241.94, 'int64':               Volume
10  Date                
11  2017-09-15  24272800
12  2017-09-18  24867600
13  2017-09-19  54253100
14  2017-09-20  39909700
15  2017-09-21  30056600}
16 
17 df1.as_matrix()
18 Out[106]: 
19 array([[  8.06000000e+00,   8.08000000e+00,   8.03000000e+00,
20           8.04000000e+00,   1.95430000e+02,   2.42728000e+07],
21        [  8.05000000e+00,   8.13000000e+00,   8.03000000e+00,
22           8.06000000e+00,   2.00760000e+02,   2.48676000e+07],
23        [  8.03000000e+00,   8.06000000e+00,   7.94000000e+00,
24           8.00000000e+00,   4.33760000e+02,   5.42531000e+07],
25        [  7.97000000e+00,   8.06000000e+00,   7.95000000e+00,
26           8.03000000e+00,   3.19940000e+02,   3.99097000e+07],
27        [  8.02000000e+00,   8.10000000e+00,   7.99000000e+00,
28           8.04000000e+00,   2.41940000e+02,   3.00566000e+07]])

View Code

11.asfreq(澳门永利娱乐总站,freqmethod=Nonehow=Nonenormalize=Falsefill_value=None),将时刻连串转化为特定的频度

澳门永利娱乐总站 15澳门永利娱乐总站 16

 1 #创建一个具有4个分钟时间戳的序列
 2 >>> index=pd.date_range('1/1/2017',periods=4,freq='T')
 3 >>> series=pd.Series([0.0,None,2.0,3.0],index=index)
 4 >>> df=pd.DataFrame({'S':series})
 5 >>> df
 6                        S
 7 2017-01-01 00:00:00  0.0
 8 2017-01-01 00:01:00  NaN
 9 2017-01-01 00:02:00  2.0
10 2017-01-01 00:03:00  3.0
11 
12 #将序列升采样以30秒为间隔的时间序列
13 >>> df.asfreq(freq='30S')
14                        S
15 2017-01-01 00:00:00  0.0
16 2017-01-01 00:00:30  NaN
17 2017-01-01 00:01:00  NaN
18 2017-01-01 00:01:30  NaN
19 2017-01-01 00:02:00  2.0
20 2017-01-01 00:02:30  NaN
21 2017-01-01 00:03:00  3.0
22 
23 #再次升采样,并将填充值设为5.0,可以发现并不改变升采样之前的数值
24 >>> df.asfreq(freq='30S',fill_value=5.0)
25                        S
26 2017-01-01 00:00:00  0.0
27 2017-01-01 00:00:30  5.0
28 2017-01-01 00:01:00  NaN
29 2017-01-01 00:01:30  5.0
30 2017-01-01 00:02:00  2.0
31 2017-01-01 00:02:30  5.0
32 2017-01-01 00:03:00  3.0
33 
34 #再次升采样,提供一个方法,对于空值,用后面的一个值填充
35 >>> df.asfreq(freq='30S',method='bfill')
36                        S
37 2017-01-01 00:00:00  0.0
38 2017-01-01 00:00:30  NaN
39 2017-01-01 00:01:00  NaN
40 2017-01-01 00:01:30  2.0
41 2017-01-01 00:02:00  2.0
42 2017-01-01 00:02:30  3.0
43 2017-01-01 00:03:00  3.0

View Code

12.asof“(wheresubset=None),再次来到非空的行

 1 >>> df.asof(index[0])
 2 S    0.0
 3 Name: 2017-01-01 00:00:00, dtype: float64
 4 
 5 >>> df.asof(index)
 6                        S
 7 2017-01-01 00:00:00  0.0
 8 2017-01-01 00:01:00  0.0
 9 2017-01-01 00:02:00  2.0
10 2017-01-01 00:03:00  3.0

13.assign(\*kwargs*),向DataFrame添加新的列,重返一个新的对象蕴涵了原先的列和新扩充的列

澳门永利娱乐总站 17澳门永利娱乐总站 18

 1 >>> df=pd.DataFrame({'A':range(1,11),'B':np.random.randn(10)})
 2 >>> df
 3     A         B
 4 0   1  0.540750
 5 1   2  0.099605
 6 2   3  0.165043
 7 3   4 -1.379514
 8 4   5  0.357865
 9 5   6 -0.060789
10 6   7 -0.544788
11 7   8 -0.347995
12 8   9  0.372269
13 9  10 -0.212716
14 
15 >>> df.assign(ln_A=lambda x:np.log(x.A))
16     A         B      ln_A
17 0   1  0.540750  0.000000
18 1   2  0.099605  0.693147
19 2   3  0.165043  1.098612
20 3   4 -1.379514  1.386294
21 4   5  0.357865  1.609438
22 5   6 -0.060789  1.791759
23 6   7 -0.544788  1.945910
24 7   8 -0.347995  2.079442
25 8   9  0.372269  2.197225
26 9  10 -0.212716  2.302585
27 
28 #每次只能添加一列,之前添加的列会被覆盖
29 >>> df.assign(abs_B=lambda x:np.abs(x.B))
30     A         B     abs_B
31 0   1  0.540750  0.540750
32 1   2  0.099605  0.099605
33 2   3  0.165043  0.165043
34 3   4 -1.379514  1.379514
35 4   5  0.357865  0.357865
36 5   6 -0.060789  0.060789
37 6   7 -0.544788  0.544788
38 7   8 -0.347995  0.347995
39 8   9  0.372269  0.372269
40 9  10 -0.212716  0.212716

View Code

14.astype“(dtypecopy=Trueerrors=’raise’\*kwargs*) 将pandas对象数据类型设置为钦赐项目

澳门永利娱乐总站 19澳门永利娱乐总站 20

 1 >>> ser=pd.Series([5,6],dtype='int32')
 2 >>> ser
 3 0    5
 4 1    6
 5 dtype: int32
 6 >>> ser.astype('int64')
 7 0    5
 8 1    6
 9 dtype: int64
10 
11 #转换为类目类型
12 >>> ser.astype('category')
13 0    5
14 1    6
15 dtype: category
16 Categories (2, int64): [5, 6]
17 >>> 
18 
19 #转换为定制化排序的类目类型
20 >>> ser.astype('category',ordered=True,categories=[1,2])
21 0   NaN
22 1   NaN
23 dtype: category
24 Categories (2, int64): [1 < 2]

View Code

  1. at_time()和between_time() 取某一随时或某段时日相应的数据

澳门永利娱乐总站 21澳门永利娱乐总站 22

 1 df1.at_time('9:00AM')
 2 Out[115]: 
 3 Empty DataFrame
 4 Columns: [Open, High, Low, Close, Turnover, Volume]
 5 Index: []
 6 
 7 df1.between_time('9:00AM','9:30AM')
 8 Out[114]: 
 9 Empty DataFrame
10 Columns: [Open, High, Low, Close, Turnover, Volume]
11 Index: []
12 
13 df1.at_time('00:00AM')
14 Out[116]: 
15             Open  High   Low  Close  Turnover    Volume
16 Date                                                   
17 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
18 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
19 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
20 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
21 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600

View Code

16.bfill(axis=Noneinplace=Falselimit=Nonedowncast=None)和fillna(method=’bfill’)效率等同

 1 >>> df.bfill()
 2                        S
 3 2017-01-01 00:00:00  0.0
 4 2017-01-01 00:01:00  2.0
 5 2017-01-01 00:02:00  2.0
 6 2017-01-01 00:03:00  3.0
 7 >>> df.fillna(method='bfill')
 8                        S
 9 2017-01-01 00:00:00  0.0
10 2017-01-01 00:01:00  2.0
11 2017-01-01 00:02:00  2.0
12 2017-01-01 00:03:00  3.0

 17.boxplot(column=Noneby=Noneax=Nonefontsize=Nonerot=0grid=Truefigsize=Nonelayout=Nonereturn_type=None\*kwds*)

依照DataFrame的列成分可能可选分组绘制箱线图

1 df1.boxplot('Open')
2 Out[117]: <matplotlib.axes._subplots.AxesSubplot at 0x20374716860>

澳门永利娱乐总站 23

 

1 df1.boxplot(['Open','Close'])
2 Out[118]: <matplotlib.axes._subplots.AxesSubplot at 0x2037477da20>

澳门永利娱乐总站 24

 

相关文章