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的方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM