pandas.DataFrame学习系列1——定义及属性

定义:

DataFrame是二维的、大小可变的、成分混合的、具有标签化坐标轴(行和列)的表数据结构。基于行和列标签进行计算。可以被看作是为序列对象(Series)提供的类似字典的一个容器,是pandas中主要的数据结构。

形式:

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

参数含义:

data : numpy ndarray(多维数组)(结构化或同质化的), dict(字典), or DataFrame(数据表)如果是字典类型,该字典可以包含序列,数组,常量或类列表型对象
index : Index or array-like 索引或数组类型,如果输入数据中没有索引信息以及没有提供索引时默认赋值为arange(n)即从0开始的等差数组
columns : Index
or array-like 索引或数组类型,没有提供列标签时默认赋值为0开始的等差数组
dtype : dtype, default None 数据类型,默认为空。
只允许有一种数据类型,如果为空,自动推断类型
copy : boolean, default False 布尔类型,默认为False。
从输入值中拷贝数据,只对输入为DataFrame或者二维数组时有影响

其他构建DataFrame类型的方法:

classmethod DataFrame.from_records(data, index=None, exclude=None, columns=None, coerce_float=False, nrows=None)[source]

classmethod DataFrame.from_dict(data, orient='columns', dtype=None)

pandas.read_csv, pandas.read_table, pandas.read_clipboard,pandas.read_excel等

 举例:

从字典构建DataFrame
>>> d = {'col1': [1, 2], 'col2': [3, 4]} >>> df = pd.DataFrame(data=d) >>> df col1 col2 0 1 3 1 2 4
推断类型为int64
>>> df.dtypes col1 int64 col2 int64 dtype: object
强制设置为单一类型
>>> df = pd.DataFrame(data=d, dtype=np.int8)
>>> df.dtypes
col1    int8
col2    int8
dtype: object
从numpy多维数组类型构建DataFrame
>>> df2 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
...                    columns=['a', 'b', 'c', 'd', 'e'])
>>> df2
    a   b   c   d   e
0   2   8   8   3   4
1   4   2   9   0   9
2   1   0   7   8   0
3   5   1   7   1   3
4   6   0   2   4   2

属性:

获取和创建DataFrame

 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 
 7 In [38]:df1.head()
 8 Out[38]: 
 9          Open  High   Low  Close  Turnover    Volume
10 Date                                                   
11 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
12 2017-09-18  8.05  8.13  8.03   8.06    200.76  24867600
13 2017-09-19  8.03  8.06  7.94   8.00    433.76  54253100
14 2017-09-20  7.97  8.06  7.95   8.03    319.94  39909700
15 2017-09-21  8.02  8.10  7.99   8.04    241.94  30056600

--转置,转置以后DataFrame的index属性值为None

1 In [39]:  df1.T
2 Out[39]: 
3 Date       2017-09-15   2017-09-18   2017-09-19   2017-09-20   2017-09-21
4 Open             8.06         8.05         8.03         7.97         8.02
5 High             8.08         8.13         8.06         8.06         8.10
6 Low              8.03         8.03         7.94         7.95         7.99
7 Close            8.04         8.06         8.00         8.03         8.04
8 Turnover       195.43       200.76       433.76       319.94       241.94
9 Volume    24272800.00  24867600.00  54253100.00  39909700.00  30056600.00

--基于标签快速访问

In [35]:  date=pd.to_datetime('2017-09-15')
In [36]:  date
Out[36]: Timestamp('2017-09-15 00:00:00')
In [37]:  df1.at[date,'Open']
Out[37]: 8.0600000000000005

--获取行轴和列轴标签名

1 In [44]: df1.axes
2 Out[44]: 
3 [DatetimeIndex(['2017-09-15', '2017-09-18', '2017-09-19', '2017-09-20',
4                 '2017-09-21'], dtype='datetime64[ns]', name='Date', freq=None),
5  Index(['Open', 'High', 'Low', 'Close', 'Turnover', 'Volume'], dtype='object')]

 --内置属性

 1 In[45]: df1.blocks
 2 Out[45]: 
 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,
10  'int64':               Volume
11  Date                
12  2017-09-15  24272800
13  2017-09-18  24867600
14  2017-09-19  54253100
15  2017-09-20  39909700
16  2017-09-21  30056600}

--各列数据类型

1 In[46]:  df1.dtypes
2 Out[46]: 
3 Open        float64
4 High        float64
5 Low         float64
6 Close       float64
7 Turnover    float64
8 Volume        int64
9 dtype: object

 --判断DataFrame是否完全为空

1 In [47]: df1.empty
2 Out[47]: False

--返回稀疏或密集的标示及数据类型

1 In[48]:  df1.ftypes
2 Out[48]: 
3 Open        float64:dense
4 High        float64:dense
5 Low         float64:dense
6 Close       float64:dense
7 Turnover    float64:dense
8 Volume        int64:dense
9 dtype: object

--快速整数标量定位(到具体元素,相当于给出坐标)

1 In[49]:  df1.iat[0,1] #第1行,第2列
2 Out[49]: 8.0800000000000001
3 
4 In[50]:  df1.iat[1,0] #第2行,第1列
5 Out[50]: 8.0500000000000007

 --用于位置选择的基于整数定位的索引(切片)

 1 In [2]:  df1.iloc[0:1]
 2 Out[2]: 
 3             Open  High   Low  Close  Turnover    Volume
 4 Date                                                   
 5 2017-09-15  8.06  8.08  8.03   8.04    195.43  24272800
1 In [3]:  df1.iloc[0:1,2:]
2 Out[3]: 
3              Low  Close  Turnover    Volume
4 Date                                       
5 2017-09-15  8.03   8.04    195.43  24272800

--混合方式定位(基于整数位置或标签名以及它们的组合,可以只用行标签,但是不能只用列标签)

1 In [6]:  df1.ix[1,'Open']
2 Out[6]: 8.0500000000000007
1 In [7]:  df1.ix[1]
2 Out[7]: 
3 Open               8.05
4 High               8.13
5 Low                8.03
6 Close              8.06
7 Turnover         200.76
8 Volume      24867600.00
9 Name: 2017-09-18 00:00:00, dtype: float64

--选择位置的基于标签名的索引

1 In[7]:  df1.loc[date,'Low']
2 Out[7]: 8.0299999999999994
3 
4 In [8]: df1.loc[df1.index[0],'Low']
5 Out[8]: 8.0299999999999994

--坐标轴个数

1 In [10]: df1.ndim
2 Out[10]: 2

--DataFrame的形状(行列数)

1 In [11]:  df1.shape
2 Out[11]: (5, 6)

--DataFrame的大小(元素个数)

1 In [12]:  df1.size
2 Out[12]: 30

--返回DataFrame样式对象

1 In [13]:  df1.style
2 Out[13]: <pandas.io.formats.style.Styler at 0x1c410cf8eb8>

--返回DataFrame里的数值(二维数组)

 1 In [14]: df1.values
 2 Out[14]: 
 3 array([[  8.06000000e+00,   8.08000000e+00,   8.03000000e+00,
 4           8.04000000e+00,   1.95430000e+02,   2.42728000e+07],
 5        [  8.05000000e+00,   8.13000000e+00,   8.03000000e+00,
 6           8.06000000e+00,   2.00760000e+02,   2.48676000e+07],
 7        [  8.03000000e+00,   8.06000000e+00,   7.94000000e+00,
 8           8.00000000e+00,   4.33760000e+02,   5.42531000e+07],
 9        [  7.97000000e+00,   8.06000000e+00,   7.95000000e+00,
10           8.03000000e+00,   3.19940000e+02,   3.99097000e+07],
11        [  8.02000000e+00,   8.10000000e+00,   7.99000000e+00,
12           8.04000000e+00,   2.41940000e+02,   3.00566000e+07]])

以上为DataFrame的主要属性,后面继续介绍DataFrame的方法。

原文地址:https://www.cnblogs.com/snow-Andy/p/7762151.html