十分鐘入門pandas(上)【解讀pandas官方文檔】
前言
其實,學習Python很好的方法是去看官方文檔。
有人會說,我零基礎,看不懂啊!
也有人會說,我英語差,看不懂啊!!
還有人會說,我想學實戰案例,不想看的這麼詳細!!!
是的,官方文檔說的面面俱到,像是查字典似的,對於初學者是很不友善的
所以大部分人選擇了:拒絕!
其實,我以前也是不看官方文檔的,但有些問題百度不到,看的書里沒講到,那我就被迫去看官方文檔了
此舉給我打開了學習Python的一扇窗
我發現,官方文檔其實有很多例子和入門學習內容,比如我們今天要說的
十分鐘入門Pandas
很多人討厭看官方文檔,今天我就用中文簡單解讀一下,爭取讓大家看懂,能入門Pandas
官方文檔說想要詳細了解Pandas的更多用法可以看它的cookbook:http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook
導入模塊
import pandas as pdnnimport numpy as npnnimport matplotlib.pyplot as pltn
這分別導入了pandas、numpy包 和 matplotlib 包中的 pyplot 模塊
創建對象
請參見「數據結構簡介」部分:http://pandas.pydata.org/pandas-docs/version/0.20/dsintro.html#dsintro
通過一個列表的值創建一個系列,讓pandas創建一個默認的整數索引:n
s = pd.Series([1,3,5,np.nan,6,8])nnsn
注意:np.nan表示不存在
通過numpy創建的數組,可以創建一個pandas中特有的dataframe,使用datetime作為索引和標記列名。
dates = pd.date_range(20130101, periods=6)nndatesn
這裡的date_range()是pandas下的一個方法,可以在jupyter notebook下使用如下方法查看使用說明:
?pd.date_range()n
我們可以看到這個方法的使用說明和各個參數的作用
看到這個方法是返回固定頻率日期時間索引,返回連續的六個日期信息
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list(ABCD))ndfn
?np.random.randn()n
np.random.randn(6,4)是生成6行4列的標準正態分布數據
註:這裡使用ABCD為列標籤,之前生成的日期序列為行標籤,6行4列標準正態分布數據為內容的dataframe
使用字典來創建dataframe
df2 = pd.DataFrame({ A : 1.,n B : pd.Timestamp(20130102),n C : pd.Series(1,index=list(range(4)),dtype=float32),n D : np.array([3] * 4,dtype=int32),n E : pd.Categorical(["test","train","test","train"]),n F : foo })ndf2n
查看dataframe的類型信息
df2.dtypesn
查看數據
更多內容請參閱基礎部分:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics
查看dataframe頂部和底部的行(默認五行)
df.head()#查看默認前五行n
df.tail()#查看默認後五行n
df.head(3)#查看前三行n
顯示索引,列和底層numpy數據
顯示索引:
df.indexn
顯示列名:
df.columnsn
查看底層numpy數據:
df.valuesn
對數據的描述性統計信息
df.describe()n
注意:數據需要是數字類型(float,int等)
轉置調換數據
df.Tn
注意:就像線性代數裡面的轉置矩陣
按軸排序
df.sort_index(axis=1, ascending=False)n
可能你還看不太明白這是什麼方法
我們help一下
這說明axis可以取0或者1,我們試試看0:
df.sort_index(axis=0, ascending=False)n
可以看出兩者的區別
深入挖掘其中的參數作用還得你自己慢慢看呢
按值排序
df.sort_values(by=B)n
這是B列數據排序,並且其他數據參照B列數據變化。
選擇數據
更多內容請參閱索引文檔索引:http://pandas.pydata.org/pandas-docs/version/0.20/indexing.html#indexing
和選擇數據和多指標/高級索引:http://pandas.pydata.org/pandas-docs/version/0.20/advanced.html#advanced
選擇一個列,返回一個Series,相當於df.A
df[A] #取A列數據,返回的是一個序列n
選擇通過[],切片出行數據
df[0:3] #使用默認索引取出前三行n
df[20130102:20130104] #使用新索引取出對應行n
標籤選擇
在標籤選擇中查看更多內容:http://pandas.pydata.org/pandas-docs/version/0.20/indexing.html#indexing-label
使用標籤獲取一塊數據:
df.loc[dates[0]] #取出第一行n
通過標籤選擇多列:
df.loc[:,[A,B]] #這裡選擇的是A,B列數據n
顯示標籤切片:
df.loc[20130102:20130104,[A,B]]n
減少返回對象的維度:
df.loc[20130102,[A,B]]n
獲得標量值(就是定位一個具體的值):
df.loc[dates[0],A]n
快速訪問標量(等同於先前的方法):
df.at[dates[0],A]n
按位置選擇
更多按位置選擇內容:http://pandas.pydata.org/pandas-docs/version/0.20/indexing.html#indexing-integer
通過傳遞的整數的位置進行選擇:
df.iloc[3] #取出第三行n
通過整數切片,類似於numpy / python:
df.iloc[3:5,0:2]n
切出3-4行,1-2列一塊區域
通過整數位置列表切分,類似numpy的/ Python的風格:
df.iloc[[1,2,4],[0,2]]n
切分出某些行:
df.iloc[1:3,:]n
切分出某些列:
df.iloc[:,1:3]n
獲取某個值
df.iloc[1,1]n
快速訪問某個值(等同於先前的方法):n
df.iat[1,1]n
布爾索引
使用單列值選擇數據
df[df.A > 0]n
注意:先判斷A欄中大於零的數,然後把這些行取出來
從滿足布爾條件的DataFrame中選擇值:
df[df > 0]n
註:顯示dataframe中大於零的數
使用isin()方法進行過濾:
df2 = df.copy()ndf2[E] = [one, one,two,three,four,three]ndf2n
註:copy了一份dataframe,然後新加了一列E
?df2.isin()n
從help文件可以知道isin()方法的作用是:
DataFrame顯示每個元素是否在DataFrame包含在值中,返回boolean.
df2[df2[E].isin([two,four])]n
相當於判斷two和four兩列是否在df2中,在的話返回True,然後將參數傳入df2,返回這兩列的值。
設置
置新的列會自動使索引對齊數據:
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range(20130102, periods=6))ns1n
df[F] = s1ndfn
這裡用和原來一樣的索引(時間)為原來的dataframe增加了一列數據
通過使用numpy數組分配進行設置:n
df.loc[:,D] = np.array([5] * len(df))ndfn
註:產生一個數組,每個元素值為5,長度為df的行數,替換在原來df的D列
按位置設定值:n
df.iat[0,1] = 0ndfn
註:將第一行第二列的數值設定為0
設置操作:
df2 = df.copy()ndf2[df2 > 0] = -df2ndf2n
註:將df copy一份命名為df2,然後將df2中大於零的數加負號
作者:王大偉
文章來源:十分鐘入門pandas(上)【解讀pandas官方文檔】 - 天善智能:專註於商業智能BI和數據分析、大數據領域的垂直社區平台
推薦閱讀:
※安卓運行Python的神器:QPython
※python多進程為什麼一定要__name__="__main__"?
※for循環在Python中是怎麼工作的
TAG:Python |