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