pandas的基本使用
1. pandas中DataFrame類型數據操作函數
1.1 基本使用
python數據分析工具pandas中DataFrame和Series作為主要的數據結構,這里整理下:
(1)查看DataFrame數據及屬性:
- df_obj = DataFrame() # 創建DataFrame對象
- df_obj.dtypes # 查看各行的數據格式
- df_obj[‘列名’].astype(int) # 轉換某列的數據類型
- df_obj.head() # 查看前幾行的數據,默認前5行
- df_obj.tail() # 查看后幾行的數據,默認后5行
- df_obj.index # 查看索引
- df_obj.columns # 查看列名
- df_obj.values # 查看數據值
- df_obj.describe() # 描述性統計
- df_obj.T # 轉置
- df_obj.sort_values(by=[”,”])
(2)使用DataFrame操作數據:
- df_obj.ix[1:3] # 獲取1-3行的數據,切片操作獲取行數據
- df_obj.ix[columns_index] # 獲取列的數據
- df_obj.ix[1:3,[1,3]] # 獲取1列和3列的1~3行數據
- df_obj[columns].drop_duplicates() # 剔除重復行數據
- df_obj.ix[1:3,[1,3]]=1 # 所選位置數據替換為1
(3)使用DataFrame篩選數據(類似SQL中的WHERE):
alist = ['023-18996609823'] df_obj['用戶號碼'].isin(alist) #將要過濾的數據放入字典中,使用isin對數據進行篩選,返回行索引以及每行篩選的結果,若匹配則返回ture df_obj[df_obj['用戶號碼'].isin(alist)] #獲取匹配結果為ture的行(4)使用DataFrame模糊篩選數據(類似SQL中的LIKE):
df_obj[df_obj['套餐'].str.contains(r'.*?語音CDMA.*')] #使用正則表達式進行模糊匹配,*匹配0或無限次,?匹配0或1次(5)使用DataFrame進行數據轉換
df_obj['支局_維護線'] = df_obj['支局_維護線'].str.replace('巫溪分公司(.{2,})支局','\\1') # 可以使用正則表達式可以設置take_last=ture保留最后一個,或保留開始一個。
補充說明:注意take_last=ture已過時,請使用keep=last。
(6)使用pandas中讀取數據:
read_csv(r'D:\LQJ.csv',sep=';',nrows=2) #首先輸入csv文本地址,然后分割符選擇等等 df.to_excel('foo.xlsx',sheet_name='Sheet1') # 寫入讀取excel數據 pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])pd.read_excel # 讀取的數據是以DataFrame形式存儲 df.to_hdf('foo.h5','df') pd.read_hdf('foo.h5','df')#寫入讀取HDF5數據(7)使用pandas聚合數據(類似SQL中的GROUP BY 或HAVING):
data_obj['用戶標識'].groupby(data_obj['支局_維護線']) data_obj.groupby('支局_維護線')['用戶標識'] #上面的簡單寫法 adsl_obj.groupby('支局_維護線')['用戶標識'].agg([('ADSL','count')])#按支局進行匯總對用戶標識進行計數,并將計數列的列名命名為ADSL(8)清理數據
df[df.isnull()] df[df.notnull()] df.dropna() # 將所有含有nan項的row刪除 df.dropna(axis=1,thresh=3) # 將在列的方向上三個為NaN的項刪除 df.dropna(how='ALL')# 將全部項都是nan的row刪除填充值 df.fillna(0) df.fillna({1:0,2:0.5}) # 對第一列nan值賦0,第二列賦值0.5 df.fillna(method='ffill') # 在列方向上以前一個值作為值賦給NaN1.2 示例:
DataFrame提供的是一個類似表的結構,由多個Series組成,而Series在DataFrame中叫columns。
(1)參數:二維array和Series 列表的區別
從運行結果可以看出Series效果與二維array相同。
(2)value為Series的字典結構時:
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操作區域]: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有點類似列表推導式。。
(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)根據條件選擇取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內建函數是一個二元操作函數,他用來將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給reduce中的函數 func()(必須是一個二元操作函數)先對集合中的第1,2個數據進行操作,得到的結果再與第三個數據用func()函數運算,最后得到一個結果。
(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 #列出動物中weight最大的對應size group=df.groupby("animal").apply(lambda subf: subf['size'][subf['weight'].idxmax()]) print groupcookbook
參考:http://blog.csdn.net/ly_ysys629/article/details/54428838
總結
以上是生活随笔為你收集整理的pandas的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 商家不刷信用卡原因
- 下一篇: CNN基础知识(1)