十分鐘入門pandas(中)【解讀pandas官方文檔】
接著前文繼續
前文傳送門: https://ask.hellobi.com/blog/wangdawei/8683
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來表示丟失的數據。 默認情況下不包括在計算中。 請參閱缺少數據部分:http://pandas.pydata.org/pandas-docs/version/0.20/missing_data.html#missing-data
重新索引允許您更改/添加/刪除指定軸上的索引。 這將返回數據的副本。
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的是空值數據
操作
請參閱二進位操作的基本部分:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-binop
統計
操作中一般不包含丟失的數據
執行描述性統計:
df.mean() #求每列平均值n
df.mean(1) #每行求平均值n
Apply
將功能用於處理數據
df.apply(np.cumsum)n
註:列累加,就是第二列的結果等於第一列加第二列數據,依次累加。
使用匿名函數求每列的最大值和最小值的差:
df.apply(lambda x: x.max() - x.min())n
直方圖化
直方圖和離散化查看更多資料:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-discretization
s = pd.Series(np.random.randint(0, 7, size=10))nsn
註:在0-7中隨機產生10個整數
s.value_counts()n
註:對數據進行計數
操作字元串的方法
字元串方法
Series中配置了一組字元串處理方法,使其易於在數組的每個元素上進行操作,如下面的代碼片段所示。請注意,str中的模式匹配通常默認使用正則表達式(在某些情況下始終使用它們)。 在矢量化字元串方法中查看更多:http://pandas.pydata.org/pandas-docs/version/0.20/text.html#text-string-methods
正則表達式:https://docs.python.org/2/library/re.html
s = pd.Series([A, B, C, Aaba, Baca, np.nan, CABA, dog, cat]) n
註:創建一個Series
s.str.lower()n
註:把其中所有的英文字母變成小寫
合併
字元連接
合併操作更多內容:http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging
將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風格合併。 請參閱資料庫風格加入:http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging-join
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添加行,參考http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging-concatenation
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.將結果合併成數據結構
更多內容參考:http://pandas.pydata.org/pandas-docs/version/0.20/groupby.html#groupby
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列細分,再求和
資料重塑
請參閱有關分層索引和資料重塑的部分:
http://pandas.pydata.org/pandas-docs/version/0.20/advanced.html#advanced-hierarchical
http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-stacking
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?