pandas中的DataFrame数据结构
pd.DataFrame()
DataFrame 是一種二維的數據模型,相當于EXcel表格中的數據,有橫豎兩種坐標,橫軸用columns,豎軸用index 來確定,在建立DataFrame 對象的時候,需要確定三個元素:數據,豎軸,橫軸。
DataFrame既有行索引也有列索引,
1. 設置索引index
a.index = a['x'] print(a) //可新建一個DataFrame,index設置為別的表格index labels = pd.DataFrame(columns=['s','x'],index=a.index) print(labels)2. a.iloc[行位置,列位置]
通過默認生成的數字索引查詢指定的數據
下面表格說明:
- i值里的數字可以為正數也可以為負數,正數0代表第一行,1代表第2行;負數 -1代表倒數第一行,-2代表倒數第2行
| a.iloc[i] | i值可以是數字也可以是一個數組,獲取第i行數據或者行子集 |
| a.iloc[:,j] | j值可以是數字也可以是一個數組, 獲取第j列數據或者列子集 |
| a.iloc[i,j] | 獲取第i行第j列的值 |
1. a.iloc[i] 獲取第i行數據或者行子集
print(a) print(a.iloc[0]) #獲取第一行數據 print(a.iloc[:2]) #獲取第一行和第二行 print(a.iloc[1:]) #獲取第二行到最后一行的數據 print(a.iloc[[0,-1]]) #獲取第一行和倒數第一行數據2. a.iloc[:,j] 獲取第j列數據或者列子集
print(a.iloc(:,0) #獲取第0列數據 print(a.iloc[:,[0,1]]) #獲取第一列和第二列數據 print(a.iloc[:,:2]) #獲取第一列和第2列3. a.iloc[i,j] 獲取第i行第j列的值
print.iloc(-1,0) #獲取倒數第一行第一列數據,即 12 print(a.iloc[1,[0,1]]) #獲取第2行,第一二列數據 print(a.iloc[[0,1],2]) #獲取第一二行第3列數據 print(a.iloc[[0,1],[1,2]]) #獲取第一二行的第二三列數據3. 將Pandas中的DataFrame類型轉換成Numpy中array類
在用pandas包和numpy包對數據進行分析和計算時,經常用到DataFrame和array類型的數據。在對DataFrame類型的數據進行處理時,需要將其轉換成array類型
1.a.values
import numpy as np import pandas as pdprint(a.values) print(a['w'].values)2.使用numpy中的array方法
print(np.array(a)) print(np.array(a['w']))4. pandas使用sort_index排序
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, sort_remaining=True, ignore_index=False, key=None)[source]
sort_index文檔
axis:0按照行名排序;1按照列名排序
level:默認None,否則按照給定的level順序排列—貌似并不是,文檔
ascending:默認True升序排列;False降序排列
inplace:默認False,否則排序之后的數據直接替換原來的數據框
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太關心。
na_position:缺失值默認排在最后{“first”,“last”}
by:按照某一列或幾列數據進行排序,但是by參數貌似不建議使用
3. 對列columns排序
默認axis=0,對行index排序,axis=1對列index排行
5. pandas中的rolling函數用于移動計算
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, method=‘single’)
rolling文檔
window: 也可以省略不寫。表示時間窗的大小,注意有兩種形式(int or offset)。如果使用int,則數值表示計算統計量的觀測值的數量即向前幾個數據。如果是offset類型,表示時間窗的大小。、min_periods:每個窗口最少包含的觀測值數量,小于這個值的窗口結果為NA。值可以是int,默認None。offset情況下,默認為1。
center參數,默認為False,表示當前元素往上選,加上本身總共篩選3個。
center參數,默認為True,表示以當前元素為中心,從個方向進行篩選。
win_type: 窗口的類型。截取窗的各種函數。字符串類型,默認為None。各種類型
on: 可選參數。對于dataframe而言,指定要計算滾動窗口的列。值為列名。
axis: int、字符串,默認為0,即對列進行計算
closed:定義區間的開閉,支持int類型的window。對于offset類型默認是左開右閉的即默認為right。可以根據情況指定為left both等。
6.pandas的填充缺失值fillna()
在數據集里面的缺失值需要填充起來,避免各種出錯,在做分析的時候,我們經常要將缺失值填充為前一個值,或者是后一個值。
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)[source]
| method | 取值 : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None pad/ffill:用前一個非缺失值去填充該缺失值 backfill/bfill:用下一個非缺失值填充該缺失值 None:指定一個值去替換缺失值(缺省默認這種方式) |
| inplace | False 創建一個副本,修改副本,原對象不變(缺省默認) True 直接修改原對象 |
| axis | 默認是縱向填充的;1是左右橫向填充的 |
fillna文檔
import pandas as pd import numpy as np from numpy import nan as NaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]]) print(df1)1.用常數填充
print(df1.fillna(100)) # 將所有NaN替換成1002.用字典填充
print(df1.fillna({0:10,1:20,2:30})) # 將columns為0的所有NaN填充10,為1列的所有NaN填充20,為2列的所有NaN填充303.用前一個非缺失值去填充
print(df1.fillna(method='ffill')) #用前一個非缺失值去填充該缺失值4.用后一個非缺失值去填充
print(df1.fillna(method='bfill')) #用后一個非缺失值去填充該缺失值7.pandas中的where()
where文檔
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors=‘raise’, try_cast=NoDefault.no_default)
cond :條件判斷
other: 條件cond為False時,將值替換為other
8. pandas.DataFrame.copy
DataFrame.copy文檔
DateFrame.copy(deep=True) :復制object的索引和數據
- 當deep=True時(默認), 會創建一個新的對象進行拷貝. 修改這份拷貝不會對原有對象產生影響.
- 當deep=False時, 新的對象只是原有對象的references. 任何對新對象的改變都會影響到原有對象
上面操作可以看到修改p后a也被修改了,因此我們可以用DateFrame.copy(deep=True) 復制索引和數據。
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))# b = pd.DataFrame(np.array([33,11,22,44]),index=list('adbc'),columns=['m']) print(a)p = a.iloc[2:].copy(deep=True) p.index = a.iloc[:2].index p.iloc[:2] = p - 1 print(p) print(a) #此時a沒有變化總結
以上是生活随笔為你收集整理的pandas中的DataFrame数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: window.print()方法,如何获
- 下一篇: np.sort