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