pandas總結

### 一.建立對象 
# 1 .能夠經過傳遞一個list對象來建立一個Series,pandas會默認建立整型索引:
# s=pd.Series([ 1 , 3 , 5 ,np.nan, 6 , 8 ])
# print(s)
#
# 2 .經過傳遞一個numpy array,時間索引以及列標籤來建立一個DataFrame:
# dates=pd.date_range( '20130101' ,periods= 6 )
# print(dates)
# df=pd.DataFrame(np.random.randn( 6 , 4 ),index=dates,columns=list( 'ABCD' ))
# print(df)
#
# 3 .經過傳遞一個可以被轉換成相似序列結構的字典對象來建立一個DataFrame:
# df2=pd.DataFrame({ 'A' : 1 , 'B' :pd.Timestamp( '20130102' ),
#                   'C' :pd.Series( 1 ,index=list(range( 4 )),dtype= 'float32' ),
#                   'D' :np.array([ 3 ]* 4 ,dtype= 'int32' ),
#                   'E' :pd.Categorical([ 'test' , 'train' , 'test' , 'train' ]),
#                   'F' : 'fool'
#                   })
# print(df2)
# 4 .查看不一樣列的數據類型:
# print(df2.dtypes)
#
#
### 二.查看數據
# 1 .查看frame中頭部和尾部的行:
# print(df.head( 1 ))
# print(df.tail( 1 ))
#
# 2 .顯示索引、列和底層的numpy數據:
# print(df.index)
# print(df.columns)
# print(df.values)
#
# 3 .describe()函數對於數據的快速統計彙總:
# print(df.describe())
#
# 4 .對數據的轉置:
# print(df.T)
#
# 5 .按軸進行排序
#print(df.sort_index(axis= 1 ,ascending=False))
#
# 6 .按值進行排序
# print(df.sort(columns= 'B' ))
#
#
### 三.選擇
# NO1.獲取
# 1 . 選擇一個單獨的列,這將會返回一個Series,等同於df.A:
# print(df[ 'A' ])
#
# 2 .經過[]進行選擇,這將會對行進行切片
# print(df[: 3 ]) # 其中 0 能夠省略 print(df[ 0 : 3 ])
#
# NO2.經過標籤選擇
# 1 .使用標籤來獲取一個交叉的區域
# print(df.loc[dates[ 0 ]])
#
# 2 .經過標籤來在多個軸上進行選擇
# print(df.loc[:,[ 'A' , 'B' ]])
#
# 3 .標籤切片
# print(df.loc[ '20130102' : '20130104' ,[ 'A' , 'B' ]])
#
# 4 .對於返回的對象進行維度縮減
# print(df.loc[ '20130101' ,[ 'A' , 'B' ]])
#
# 5 .獲取一個標量
# print(df.loc[dates[ 0 ], 'A' ])
#
# 6 .快速訪問一個標量(與上一個方法等價)
# print(df.at[dates[ 0 ], 'A' ])
#
# NO3.經過位置選擇 
# 1 .經過傳遞數值進行位置選擇(選擇的是行)
# print(df.iloc[ 3 ])
#
# 2 .經過數值進行切片,與numpy/python中的狀況相似
# print(df.iloc[ 3 : 5 , 0 : 2 ])
#
# 3 .經過指定一個位置的列表,與numpy/python中的狀況相似
# print(df.iloc[[ 1 , 2 , 4 ],[ 0 , 2 ]])
# 4 .對行進行切片
# print(df.iloc[ 1 : 3 ,:])
#
# 5 .對列進行切片
# print(df.iloc[:, 1 : 3 ])
#
# 6 .獲取特定的值
# print(df.iloc[ 1 , 1 ])
#
# NO4.布爾索引 
# 1 .使用一個單獨列的值來選擇數據:
# print(df[df.A> 0 ])
#
# 2 .使用where操做來選擇數據:
# print(df[df> 0 ])
#
# 3 .使用isin()方法來過濾:
# df2=df.copy()
# df2[ 'E' ]=[ 'one' , 'one' , 'one' , 'one' , 'one' , 'two' ]
# print(df2)
#
# NO5.設置
# 1 .設置一個新的列:
# s1=pd.Series([ 1 , 2 , 3 , 4 , 5 , 6 ],index=pd.date_range( '20130101' , periods= 6 ))
# print(s1)
# df[ 'F' ]=s1
# print(df)
#
# 2 .經過標籤設置新的值:
# df.at[dates[ 0 ], 'A' ]= 0
# print(df)
#
# 3 .經過位置設置新的值:
# df.iat[ 0 , 1 ]= 0
# print(df)
#
# 4 .經過一個numpy數組設置一組新值:
# df.loc[:, 'D' ]=np.array([ 5 ]*len(df))
# print(df)
#
# 5 .經過where操做來設置新的值:
# df2=df.copy()
# df2[df2> 0 ]=-df2
# print(df2)
#
#
### 四.缺失值處理
# 在pandas中,使用np.nan來代替缺失值,這些值將默認不會包含在計算中,詳情請參閱:Missing Data Section。
# 1 .reindex()方法能夠對指定軸上的索引進行改變/增長/刪除操做,這將返回原始數據的一個拷貝:、
#
# df1=df.reindex(index=dates[ 0 : 4 ],columns=list(df.columns)+[ 'E' ])
# print(df1)
#
# 2 .去掉包含缺失值的行:
# df1.dropna(how= 'any' ,inplace=True)
# print(df1)
#
# 3 .對缺失值進行填充:
# df1=df1.fillna(value= 5 )
# print(df1)
#
# 4 .對數據進行布爾填充:
# print(pd.isnull(df1))
#
#
### 五.相關操做
# 詳情請參與 Basic Section On Binary Ops
#
# NO1.統計(相關操做一般狀況下不包括缺失值)
# 1 .執行描述性統計:
# print(df.mean())
#
# 2 .在其餘軸上進行相同的操做:
# print(df.mean( 1 ))
#
# 3 .對於擁有不一樣維度,須要對齊的對象進行操做。Pandas會自動的沿着指定的維度進行廣播:
# s=pd.Series([ 1 , 3 , 5 ,np.nan, 6 , 8 ],index=dates).shift( 2 )
# print(s)
#
# NO2.Apply
# 1 .對數據應用函數:
# print(df.apply(np.cumsum))
# print(df.apply(lambda x:x.max()-x.min()))
#
# NO3.直方圖
# 具體請參照:Histogramming and Discretization
#
# s=pd.Series(np.random.randint( 0 , 7 ,size= 10 ))
# print(s)
# print(s.value_counts())
#
# NO4.字符串方法
# Series對象在其str屬性中配備了一組字符串處理方法,能夠很容易的應用到數組中的每一個元素
# s=pd.Series([ 'A' , 'B' , 'C' , 'Bcaa' ,np.nan, 'CBA' , 'dog' , 'cat' ])
# print(s.str.lower())
#    
#                 
### 六.合併
# Pandas提供了大量的方法可以輕鬆的對Series,DataFrame和Panel對象進行各類符合各類邏輯關係的合併操做。具體請參閱:Merging section
#
# NO1.Concat
# df=pd.DataFrame(np.random.randn( 10 , 4 ))
# print(df)
 
# pieces=[df[: 3 ],df[ 3 : 7 ],df[ 7 :]]
# print(pd.concat(pieces))
#
# NO2.Join 相似於SQL類型的合併
# left=pd.DataFrame({ 'key' :[ 'foo' , 'foo' ], 'lval' :[ 1 , 2 ]})
# right=pd.DataFrame({ 'key' :[ 'foo' , 'foo' ], 'rval' :[ 4 , 5 ]})
#
# print(left)
# print(right)
#
# mid=pd.merge(left,right,on= 'key' )
# print(mid)
#
# NO3.Append 將一行鏈接到一個DataFrame上
# df=pd.DataFrame(np.random.randn( 8 , 4 ),columns=[ 'A' , 'B' , 'C' , 'D' ])
# print(df)
# s=df.iloc[ 3 ]
# print(s)
# df=df.append(s,ignore_index=True)
# print(df)
#                            
#                                                 
### 七.分組
# 對於」group by」操做,咱們一般是指如下一個或多個操做步驟:
#
# NO1.(Splitting)按照一些規則將數據分爲不一樣的組;
#
# NO2.(Applying)對於每組數據分別執行一個函數;
#
# NO3.(Combining)將結果組合到一個數據結構中;
#                                        
# df=pd.DataFrame({ 'A' :[ 'foo' , 'bar' , 'foo' , 'bar' , 'foo' , 'bar' , 'foo' , 'bar' ]
#                  , 'B' :[ 'one' , 'two' , 'two' , 'one' , 'one' , 'two' , 'one' , 'two' ]
#                  , 'C' :np.random.randn( 8 ), 'D' :np.random.randn( 8 )})
# print(df)
#
# 1 .分組並對每一個分組執行sum函數:
# print(df.groupby( 'A' ).sum())
#
# 2 .經過多個列進行分組造成一個層次索引,而後執行函數:
# print(df.groupby([ 'A' , 'B' ]).sum())
#                                           
### 八.Reshaping
# NO1.Stack
# tuples=list(zip(*[[ 'bar' , 'bar' , 'baz' , 'baz' , 'foo' , 'foo' , 'qux' , 'qux' ]
#                   ,[ 'one' , 'two' , 'one' , 'two' , 'one' , 'two' , 'one' , 'two' ]]))
#
# index=pd.MultiIndex.from_tuples(tuples, names=[ 'first' , 'second' ])
# df=pd.DataFrame(np.random.randn( 8 , 2 ),index=index,columns=[ 'A' , 'B' ])
# df2=df[: 4 ]
# print(df2)
# print(df2.stack().unstack( 1 ))
#                                              
#                                                                                                 
### 九.時間序列
# Pandas在對頻率轉換進行從新採樣時擁有簡單、強大且高效的功能(如將按秒採樣的數據轉換爲按 5 分鐘爲單位進行採樣的數據)
# rng=pd.date_range( '1/1/2012' ,periods= 100 ,freq= 'S' )
# print(rng)
# ts=pd.Series(np.random.randint( 0 , 500 ,len(rng)),index=rng)
# print(ts)
# print(ts.resample( '5Min' ,how= 'sum' ))
#                                                                
# 1 .時區表示:
# rng=pd.date_range( '3/6/2012 00:00' ,periods= 5 ,freq= 'D' )
# print(rng)
# ts=pd.Series(np.random.randn(len(rng)),index=rng)
# print(ts)
# ts_utc=ts.tz_localize( 'UTC' )
# print(ts_utc)
#
# 2 .時區轉換:
# print(ts_utc.tz_convert( 'US/Eastern' ))
#
# 3 .時間跨度轉換:
# rng=pd.date_range( '1/1/2012' ,periods= 5 ,freq= 'M' )
# print(rng)
# ts=pd.Series(np.random.randn(len(rng)),index=rng)
# print(ts)
# ps=ts.to_period()
# print(ps)
# print(ps.to_timestamp())
#                                                                   
# 4 .時期和時間戳之間的轉換使得可使用一些方便的算術函數。
# prng=pd.period_range( '1990Q1' , '2000Q4' ,freq= 'Q-NOV' )
# print(prng)
# ts=pd.Series(np.random.randn(len(prng)),index=prng)
# print(ts)
# ts.index=(prng.asfreq( 'M' , 'e' )+ 1 ).asfreq( 'H' , 's' )+ 8
# print(ts.head())
#                                                                      
#                             
### 十.Categorical
# 從 0.15 版本開始,pandas能夠在DataFrame中支持Categorical類型的數據
#                                                                                           
# df=pd.DataFrame({ 'id' :[ 1 , 2 , 3 , 4 , 5 , 6 ], 'raw_grade' :[ 'a' , 'b' , 'b' , 'a' , 'a' , 'e' ]})
# print(df)
#
# 1 .將原始的grade轉換爲Categorical數據類型:
# df[ 'grade' ]=df[ 'raw_grade' ].astype( 'category' )
# print(df)
#
# 2 .將Categorical類型數據重命名爲更有意義的名稱:
# df[ 'grade' ].cat.categories=[ 'very good' , 'good' , 'very bad' ]
# print(df)
#
# 3 .對類別進行從新排序,增長缺失的類別:
# df[ 'grade' ]=df[ 'grade' ].cat.set_categories([ 'very bad' , 'bad' , 'medium' , 'good' , 'very good' ])
# print(df[ 'grade' ])
#
# 4 .排序是按照Categorical的順序進行的而不是按照字典順序進行:
# print(df.sort( 'grade' ))
#
# 5 .對Categorical列進行排序時存在空的類別:
# print(df.groupby( 'grade' ).size())             
#
#
### 十一.畫圖                                                         
# ts=pd.Series(np.random.randn( 1000 ),index=pd.date_range( '1/1/2012' ,periods= 1000 ,freq= 'D' ))
# ts=ts.cumsum()
# ts.plot()
#
# df=pd.DataFrame(np.random.randn( 1000 , 4 ),index=ts.index,columns=[ 'A' , 'B' , 'C' , 'D' ])
# df=df.cumsum()
# plt.figure();df.plot();plt.legend(loc= 'best' )
#
#
### 十二.導入和保存數據
# NO1.CSV
# 1 .寫入csv文件:
# df.to_csv( 'jeramy.csv' ,index=False)
#
# 2 .從csv文件中讀取:
# pd.read_csv( 'jeramy.csv' )
#
# NO2.EXCEL
# 1 .寫入excel文件:
# df.to_excel( 'jeramy.xlsx' ,sheet_name= 'Sheet1' )
#
# 2 .從excel文件中讀取:
# pd.read_excel( 'jeramy.xlsx' , 'Sheet1' ,index_col=None,na_values=[ 'NA' ])
相關文章
相關標籤/搜索