十分鐘入門pandas(中)【解讀pandas官方文檔】

接著前文繼續

前文傳送門: ask.hellobi.com/blog/wa

import pandas as pdnimport numpy as npnimport matplotlib.pyplot as pltnndf = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list(ABCD))ndfn

缺失值處理

pandas主要使用值np.nan來表示丟失的數據。 默認情況下不包括在計算中。 請參閱缺少數據部分:pandas.pydata.org/panda

重新索引允許您更改/添加/刪除指定軸上的索引。 這將返回數據的副本。

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

註:增加了一個新列E,並且給E列第一行和第二行數據賦值為1,則沒賦值的數據顯示不存在。

刪除存在缺失值的行:

df1.dropna(how=any)n

填充缺失值:

df1.fillna(value=5)n

註:這裡使用5去填充,實際中,我們做數據分析常用0,中位數,平均數來填充。

查看空值數據:

pd.isnull(df1)n

註:返回True的是空值數據

操作

請參閱二進位操作的基本部分:pandas.pydata.org/panda

統計

操作中一般不包含丟失的數據

執行描述性統計:

df.mean() #求每列平均值n

df.mean(1) #每行求平均值n

Apply

將功能用於處理數據

df.apply(np.cumsum)n

註:列累加,就是第二列的結果等於第一列加第二列數據,依次累加。

使用匿名函數求每列的最大值和最小值的差:

df.apply(lambda x: x.max() - x.min())n

直方圖化

直方圖和離散化查看更多資料:pandas.pydata.org/panda

s = pd.Series(np.random.randint(0, 7, size=10))nsn

註:在0-7中隨機產生10個整數

s.value_counts()n

註:對數據進行計數

操作字元串的方法

字元串方法

Series中配置了一組字元串處理方法,使其易於在數組的每個元素上進行操作,如下面的代碼片段所示。請注意,str中的模式匹配通常默認使用正則表達式(在某些情況下始終使用它們)。 在矢量化字元串方法中查看更多:pandas.pydata.org/panda

正則表達式:docs.python.org/2/libra

s = pd.Series([A, B, C, Aaba, Baca, np.nan, CABA, dog, cat]) n

註:創建一個Series

s.str.lower()n

註:把其中所有的英文字母變成小寫

合併

字元連接

合併操作更多內容:pandas.pydata.org/panda

將pandas對象用concat()連接在一起

df = pd.DataFrame(np.random.randn(10, 4))ndfn

註:產生一個10行4列的標準正態分布

pieces = [df[:3], df[3:7], df[7:]]npiecesn

註:切成三塊

pd.concat(pieces)n

註:將碎塊合併

join加入操作

SQL風格合併。 請參閱資料庫風格加入:pandas.pydata.org/panda

left = pd.DataFrame({key: [foo, foo], lval: [1, 2]})nleftn

right = pd.DataFrame({key: [foo, foo], rval: [4, 5]})nrightn

註:使用dict的方式創建兩個dataframe

pd.merge(left, right, on=key)n

註:連接之後的效果如上圖,有點像笛卡爾積操作。

另外舉個例子:

left = pd.DataFrame({key: [foo, bar], lval: [1, 2]})nleftn

right = pd.DataFrame({key: [foo, bar], rval: [4, 5]})nrightn

pd.merge(left, right, on=key)n

Append

給dataframe添加行,參考pandas.pydata.org/panda

df = pd.DataFrame(np.random.randn(8, 4), columns=[A,B,C,D])ndfn

s = df.iloc[3]ndf.append(s, ignore_index=True)n

註:將第三行複製一份添加到了最後一行(增加了一行)

分組

通過「group by」,我們指的是涉及一個或多個以下步驟的過程:

1.根據一些標準將數據分成組

2.將功能獨立應用於每個組

3.將結果合併成數據結構

更多內容參考:pandas.pydata.org/panda

df = pd.DataFrame({A : [foo, bar, foo, bar,n foo, bar, foo, foo],n B : [one, one, two, three,n two, two, one, three],n C : np.random.randn(8),n D : np.random.randn(8)})ndfn

註:生成了一個數據框

分組,然後對結果組應用函數求和:

df.groupby(A).sum()n

註:通過A列中的數據分組,A列中只有bar和foo,所以分為兩組,求和時候因為只有C/D列是數字,所以只應用在C/D列上求和

按多個列分組形成一個分層索引,然後我們應用函數:

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

註:相當於在根據A列分組的基礎上在B列細分,再求和

資料重塑

請參閱有關分層索引和資料重塑的部分:

pandas.pydata.org/panda

pandas.pydata.org/panda

Stack堆

tuples = list(zip(*[[bar, bar, baz, baz,n foo, foo, qux, qux],n [one, two, one, two,n one, two, one, two]]))ntuplesn

註:創建了一個list,並且用zip方法整合合併成內部是tuple形式

index = pd.MultiIndex.from_tuples(tuples, names=[first, second])nindexn

註:將數據轉為MultiIndex結構,即從字面上理解為多索引結構

df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=[A, B])ndfn

df2 = df[:4]n

註:取出前四行數據

stack()方法「壓縮」DataFrame的列。

stacked = df2.stack()nstackedn

註:說實話,這個我也沒看懂。。

使用「堆疊」DataFrame或Series(具有MultiIndex作為索引),stack()的反向操作是unpack(),它默認情況下解除最後一個級別

unstack會默認多層索引的series轉變為DataFrame

stacked.unstack()n

stacked.unstack(1)n

stacked.unstack(0)n

通過level指定操作索引的級別

未完待續~~~~~~~~~~~~~

作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。

出處:十分鐘入門pandas(中)【解讀pandas官方文檔】

配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享

公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。

加小編個人微信:tsdatajob ,跟作者互動,一起探討。

推薦閱讀:

Python網路爬蟲(二)- urllib爬蟲案例
python高級特性
Python面向對象編程(OOP)
PyQt5系列教程(11):今天的消息挺全哦!
如何系統的自學Python?

TAG:Python | Python教程 | Python入门 |