Pandas 基礎(chǔ)總結(jié)

Pandas 是python的數(shù)據(jù)分析庫,讓數(shù)據(jù)處理變得非常簡(jiǎn)單,處理速度上也有很多優(yōu)化,比python 的內(nèi)置方法相比有很大的優(yōu)勢(shì)。
先學(xué)兩個(gè)網(wǎng)站:

  1. python data analysis library
  2. 十分鐘入門Pandas:10 Minutes to pandas
  3. [Pandas函數(shù)使用總結(jié)](https://mp.weixin.qq.com/s/jCRTBteONIBDmvpieQlP6A

約定俗成導(dǎo)入:

from pandas import Series,DataFrame
Series可以存儲(chǔ)任意數(shù)據(jù)類型:

  1. 是一位標(biāo)記數(shù)組,numpy的一位array;
  2. Python基本數(shù)據(jù)結(jié)構(gòu)list
    DataFrame是二維標(biāo)記數(shù)據(jù)結(jié)構(gòu),列可以是不同的數(shù)據(jù)類型,可接收多種輸入

s = pd.Series([1,3,5,np.nan,6,8])
df=pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

查看檢查數(shù)據(jù)

df.dtypes : 查看不同的數(shù)據(jù)類型:
df.head(), df.tail(3):查看frame的頭和尾:
df.index,df.columns,df.values: 顯示索引,列和底層的numpy數(shù)據(jù)
df.describe(): 快速統(tǒng)計(jì)
df.T :對(duì)數(shù)據(jù)轉(zhuǎn)置
df.sort_index(axis=1, ascending=False): 按軸排序
df.sort_values(by='B'): 按值排序

選擇數(shù)據(jù),推薦使用經(jīng)過優(yōu)化的pandas的數(shù)據(jù)訪問方式:.at,.iat,.loc和.ix

  1. 直接獲取

df['A']:返回單獨(dú)的一列,等同于df.A
df[0:3]: 前三行,第一行是索引

  1. 通過標(biāo)簽選擇
  • 獲取一個(gè)交叉區(qū)域

df.loc[dates[0]]

  • 在多軸上選擇

df.loc[:,['A','B']]

  1. 通過位置選擇
  • 傳遞數(shù)值(行)df.iloc[3]
  • 數(shù)值切片 df.iloc[3:5,0:2]
  • 指定位置的列表 df.iloc[[1,2,4],[0,2]]
  • 對(duì)行進(jìn)行切片 df.iloc[1:3,:]
  • 對(duì)列進(jìn)行切片 df.iloc[:,1:3]
  • 獲取特定的值 df.iloc[1,1] == df.iat[1,1]
  1. 布爾索引
  • 一個(gè)單獨(dú)列來過濾 df[df.A > 0]
  • where過濾:> df[df.A > 0]
  • isin()過濾:

設(shè)置

  • 加一個(gè)新的列:

s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
df['F'] = s1

  • 標(biāo)簽:df.at[dates[0],'A'] =0
  • 位置:df.iat[0,1] = 0
  • numpy數(shù)組:df.loc[:,'D'] = np.array([5] * len(df))
  • where操作:

df2 = df.copy()
df2[df2 > 0] = -df2

缺失值處理

在pandas中,使用np.nan來代替缺失值,這些值將默認(rèn)不會(huì)包含在計(jì)算中。

  • reindex()方法可以對(duì)指定軸上的索引進(jìn)行改變/增加/刪除操作,這將返回原始數(shù)據(jù)的一個(gè)拷貝:

df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1

  • 去掉包含缺失值的行:

df1.dropna(how='any')

  • 對(duì)缺失值進(jìn)行填充:

df1.fillna(value=5)

  • 對(duì)數(shù)據(jù)進(jìn)行布爾填充:

pd.isnull(df1)

應(yīng)用數(shù)據(jù)

  • 應(yīng)用統(tǒng)計(jì)函數(shù): df.apply(lambda x: x.max() - x.min())
  • 直方圖統(tǒng)計(jì): s.value_counts()
  • Series對(duì)象在其str屬性中配備了一組字符串處理方法,可以很容易的應(yīng)用到數(shù)組中的每個(gè)元素: s.str.lower()

合并

Pandas提供了大量的方法能夠輕松的對(duì)Series,DataFrame和Panel對(duì)象進(jìn)行各種符合各種邏輯關(guān)系的合并操作。

  • Concat :

pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)

  • Join 類似于SQL類型的合并

left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')

  • Append 將一行連接到一個(gè)DataFrame上

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s, ignore_index=True)

分組

對(duì)于”group by”操作,我們通常是指以下一個(gè)或多個(gè)操作步驟:
-(Splitting)按照一些規(guī)則將數(shù)據(jù)分為不同的組;
-(Applying)對(duì)于每組數(shù)據(jù)分別執(zhí)行一個(gè)函數(shù);
-(Combining)將結(jié)果組合到一個(gè)數(shù)據(jù)結(jié)構(gòu)中;

df.groupby('A').sum()
df.groupby(['A','B']).sum()

重塑

  • stack()方法在DataFrame列的層次上壓縮
  • 整合DataFrame或者Series(MultiIndex作為索引),stack()的逆運(yùn)算是unstack(),默認(rèn)情況下unStack上一次的情況。
  • 透視表

pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容