pandas的基本使用
1. pandas中DataFrame類(lèi)型數(shù)據(jù)操作函數(shù)
1.1 基本使用
python數(shù)據(jù)分析工具pandas中DataFrame和Series作為主要的數(shù)據(jù)結(jié)構(gòu),這里整理下:
(1)查看DataFrame數(shù)據(jù)及屬性:
- df_obj = DataFrame() # 創(chuàng)建DataFrame對(duì)象
- df_obj.dtypes # 查看各行的數(shù)據(jù)格式
- df_obj[‘列名’].astype(int) # 轉(zhuǎn)換某列的數(shù)據(jù)類(lèi)型
- df_obj.head() # 查看前幾行的數(shù)據(jù),默認(rèn)前5行
- df_obj.tail() # 查看后幾行的數(shù)據(jù),默認(rèn)后5行
- df_obj.index # 查看索引
- df_obj.columns # 查看列名
- df_obj.values # 查看數(shù)據(jù)值
- df_obj.describe() # 描述性統(tǒng)計(jì)
- df_obj.T # 轉(zhuǎn)置
- df_obj.sort_values(by=[”,”])
(2)使用DataFrame操作數(shù)據(jù):
- df_obj.ix[1:3] # 獲取1-3行的數(shù)據(jù),切片操作獲取行數(shù)據(jù)
- df_obj.ix[columns_index] # 獲取列的數(shù)據(jù)
- df_obj.ix[1:3,[1,3]] # 獲取1列和3列的1~3行數(shù)據(jù)
- df_obj[columns].drop_duplicates() # 剔除重復(fù)行數(shù)據(jù)
- df_obj.ix[1:3,[1,3]]=1 # 所選位置數(shù)據(jù)替換為1
(3)使用DataFrame篩選數(shù)據(jù)(類(lèi)似SQL中的WHERE):
alist = ['023-18996609823'] df_obj['用戶號(hào)碼'].isin(alist) #將要過(guò)濾的數(shù)據(jù)放入字典中,使用isin對(duì)數(shù)據(jù)進(jìn)行篩選,返回行索引以及每行篩選的結(jié)果,若匹配則返回ture df_obj[df_obj['用戶號(hào)碼'].isin(alist)] #獲取匹配結(jié)果為ture的行(4)使用DataFrame模糊篩選數(shù)據(jù)(類(lèi)似SQL中的LIKE):
df_obj[df_obj['套餐'].str.contains(r'.*?語(yǔ)音CDMA.*')] #使用正則表達(dá)式進(jìn)行模糊匹配,*匹配0或無(wú)限次,?匹配0或1次(5)使用DataFrame進(jìn)行數(shù)據(jù)轉(zhuǎn)換
df_obj['支局_維護(hù)線'] = df_obj['支局_維護(hù)線'].str.replace('巫溪分公司(.{2,})支局','\\1') # 可以使用正則表達(dá)式可以設(shè)置take_last=ture保留最后一個(gè),或保留開(kāi)始一個(gè)。
補(bǔ)充說(shuō)明:注意take_last=ture已過(guò)時(shí),請(qǐng)使用keep=last。
(6)使用pandas中讀取數(shù)據(jù):
read_csv(r'D:\LQJ.csv',sep=';',nrows=2) #首先輸入csv文本地址,然后分割符選擇等等 df.to_excel('foo.xlsx',sheet_name='Sheet1') # 寫(xiě)入讀取excel數(shù)據(jù) pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])pd.read_excel # 讀取的數(shù)據(jù)是以DataFrame形式存儲(chǔ) df.to_hdf('foo.h5','df') pd.read_hdf('foo.h5','df')#寫(xiě)入讀取HDF5數(shù)據(jù)(7)使用pandas聚合數(shù)據(jù)(類(lèi)似SQL中的GROUP BY 或HAVING):
data_obj['用戶標(biāo)識(shí)'].groupby(data_obj['支局_維護(hù)線']) data_obj.groupby('支局_維護(hù)線')['用戶標(biāo)識(shí)'] #上面的簡(jiǎn)單寫(xiě)法 adsl_obj.groupby('支局_維護(hù)線')['用戶標(biāo)識(shí)'].agg([('ADSL','count')])#按支局進(jìn)行匯總對(duì)用戶標(biāo)識(shí)進(jìn)行計(jì)數(shù),并將計(jì)數(shù)列的列名命名為ADSL(8)清理數(shù)據(jù)
df[df.isnull()] df[df.notnull()] df.dropna() # 將所有含有nan項(xiàng)的row刪除 df.dropna(axis=1,thresh=3) # 將在列的方向上三個(gè)為NaN的項(xiàng)刪除 df.dropna(how='ALL')# 將全部項(xiàng)都是nan的row刪除填充值 df.fillna(0) df.fillna({1:0,2:0.5}) # 對(duì)第一列nan值賦0,第二列賦值0.5 df.fillna(method='ffill') # 在列方向上以前一個(gè)值作為值賦給NaN1.2 示例:
DataFrame提供的是一個(gè)類(lèi)似表的結(jié)構(gòu),由多個(gè)Series組成,而Series在DataFrame中叫columns。
(1)參數(shù):二維array和Series 列表的區(qū)別
從運(yùn)行結(jié)果可以看出Series效果與二維array相同。
(2)value為Series的字典結(jié)構(gòu)時(shí):
import pandas as pd import numpy as nps1=pd.Series(np.array([1,2,3,4])) s2=pd.Series(np.array([5,6,7,8])) df=pd.DataFrame({"a":s1,"b":s2}); print df(3)df.ix[條件,then操作區(qū)域]:if-then 操作
import pandas as pd import numpy as npdf=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) print df print '.....................' df.ix[df.A>1,'B']= -1 print df有點(diǎn)類(lèi)似列表推導(dǎo)式。。
(4)np.where(條件,then,else)
import pandas as pd import numpy as npdf=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) print df print '.............' df["then"]=np.where(df.A<3,1,0) print df(5)根據(jù)條件選擇取DataFrame:
直接取值df.[]和.loc[]
import pandas as pd import numpy as npdf=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) print df print '............' df=df[df.A>=2] print df print '............' df=df.loc[df.A>=2] print df(6)
import pandas as pd import numpy as np from functools import reducedf = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}) Crit1 = df.AAA <= 5.5 Crit2 = df.BBB == 10.0 Crit3 = df.CCC > -40.0 print df print '....................' print Crit1 print '....................' AllCrit = Crit1 & Crit2 & Crit3 CritList = [Crit1,Crit2,Crit3] print CritList AllCrit = reduce(lambda x,y: x & y, CritList) print '.....................' print AllCrit print df[AllCrit] df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}) Crit1 = df.AAA <= 5.5 Crit2 = df.BBB == 10.0 Crit3 = df.CCC > -40.0 print df print '....................' print Crit1 print '....................' AllCrit = Crit1 & Crit2 & Crit3 CritList = [Crit1,Crit2,Crit3] print CritList AllCrit = reduce(lambda x,y: x & y, CritList) print '.....................' print AllCrit print df[AllCrit] AAA BBB CCC 0 4 10 100 1 5 20 50 2 6 30 -30 3 7 40 -50 .................... 0 True 1 True 2 False 3 False Name: AAA, dtype: bool .................... [0 True 1 True 2 False 3 False Name: AAA, dtype: bool, 0 True 1 False 2 False 3 False Name: BBB, dtype: bool, 0 True 1 True 2 True 3 False Name: CCC, dtype: bool] ..................... 0 True 1 False 2 False 3 False dtype: boolAAA BBB CCC 0 4 10 100python中的reduce內(nèi)建函數(shù)是一個(gè)二元操作函數(shù),他用來(lái)將一個(gè)數(shù)據(jù)集合(鏈表,元組等)中的所有數(shù)據(jù)進(jìn)行下列操作:用傳給reduce中的函數(shù) func()(必須是一個(gè)二元操作函數(shù))先對(duì)集合中的第1,2個(gè)數(shù)據(jù)進(jìn)行操作,得到的結(jié)果再與第三個(gè)數(shù)據(jù)用func()函數(shù)運(yùn)算,最后得到一個(gè)結(jié)果。
(7)Grouping的使用:
groupby 形成group和get_group 取出其中一分組
import pandas as pd import numpy as npdf = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),'size': list('SSMMMLL'),'weight': [8, 10, 11, 1, 20, 12, 12],'adult' : [False] * 5 + [True] * 2}); print df #列出動(dòng)物中weight最大的對(duì)應(yīng)size group=df.groupby("animal").apply(lambda subf: subf['size'][subf['weight'].idxmax()]) print groupcookbook
參考:http://blog.csdn.net/ly_ysys629/article/details/54428838
總結(jié)
以上是生活随笔為你收集整理的pandas的基本使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。