pandas經常使用

#python中的pandas庫主要有DataFrame和Series類(面向對象的的語言更願意叫類) DataFrame也就是
#數據框(主要是借鑑R裏面的data.frame),Series也就是序列 ,pandas底層是c寫的 性能很棒,有大神
#作過測試 處理億級別的數據沒問題,起性能能夠跟同等配置的sas媲美
#DataFrame索引 df.loc是標籤選取操做,df.iloc是位置切片操做
print(df[['row_names','Rape']])
df['行標籤']
df.loc[行標籤,列標籤]
print(df.loc[0:2,['Rape','Murder']])
df.iloc[行位置,列位置]
df.iloc[1,1]#選取第二行,第二列的值,返回的爲單個值
df.iloc[0,2],:]#選取第一行及第三行的數據
df.iloc[0:2,:]#選取第一行到第三行(不包含)的數據
df.iloc[:,1]#選取全部記錄的第一列的值,返回的爲一個Series
df.iloc[1,:]#選取第一行數據,返回的爲一個Series
print(df.ix[1,1]) # 更廣義的切片方式是使用.ix,它自動根據你給到的索引類型判斷是使用位置仍是標籤進行切片
print(df.ix[0:2])html


#DataFrame根據條件選取子集 相似於sas裏面if、where ,R裏面的subset之類的函數
df[df.Murder>13]
df[(df.Murder>10)&(df.Rape>30)]
df[df.sex==u'男']
#重命名 至關於sas裏面的rename R軟件中reshape包的中的rename
df.rename(columns={'A':'A_rename'})
df.rename(index={1:'other'})python

#刪除列 至關於sas中的drop R軟件中的test['col']<-null
df.drop(['a','b'],axis=1) or del df[['a','b']]mysql

#排序 至關於sas裏面的sort R軟件裏面的df[order(x),]
df.sort(columns='C') #行排序 y軸上
df.sort(axis=1) #各個列之間位置排序 x軸上sql

#數據描述 至關於sas中proc menas R軟件裏面的summary
df.describe()數據庫


#生成新的一列 跟R裏面有點相似
df['new_columns']=df['columns']
df.insert(1,'new_columns',df['B']) #效率最高
df.join(Series(df['columns'],name='new_columns'))app


#列上面的追加 至關於sas中的append R裏面cbind()
df.append(df1,ignore_index=True)
pd.concat([df,df1],ignore_index=True)函數

#最經典的join 跟sas和R裏面的merge相似 跟sql裏面的各類join對照
merge()性能

#刪除重行 跟sas裏面nodukey R裏面的which(!duplicated(df[])相似
df.drop_duplicated()測試

#獲取最大值 最小值的位置 有點相似矩陣裏面的方法
df.idxmin(axis=0 ) df.idxmax(axis=1) 0和1有什麼不一樣 本身摸索去excel

#讀取外部數據跟sas的proc import R裏面的read.csv等相似
read_excel() read_csv() read_hdf5() 等

與之相反的是df.to_excel() df.to_ecv()

#缺失值處理 我的以爲pandas中缺失值處理比sas和R方便多了
df.fillna(9999) #用9999填充

#連接數據庫 很少說 pandas裏面主要用 MySQLdb
import MySQLdb
conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="mysql",use_unicode=True,charset="utf8")
read_sql() #很經典
#寫數據進數據庫
df.to_sql('hbase_visit',con, flavor="mysql", if_exists='replace', index=False)

#groupby 跟sas裏面的中的by R軟件中dplyr包中的group_by sql裏面的group by功能是同樣的 這裏很少說

#求啞變量
dumiper=pd.get_dummies(df['key'])
df['key'].join(dumpier)

#透視表 和交叉表 跟sas裏面的proc freq步相似 R裏面的aggrate和cast函數相似
pd.pivot_table()
pd.crosstab()

#聚合函數常常跟group by一塊兒組合用
df.groupby('sex').agg({'height':['mean','sum'],'weight':['count','min']})


#數據查詢過濾
test.query("0.2
將STK_ID中的值過濾出來
stk_list = ['600809','600141','600329']中的所有記錄過濾出來,命令是:rpt[rpt['STK_ID'].isin(stk_list)].
將dataframe中,某列進行清洗的命令
刪除換行符:misc['product_desc'] = misc['product_desc'].str.replace('\n', '')
刪除字符串先後空格:df["Make"] = df["Make"].map(str.strip)


若是用模糊匹配的話,命令是:
rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')]


對dataframe中元素,進行類型轉換

df['2nd'] = df['2nd'].str.replace(',','').astype(int) df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64)
#時間變換 主要依賴於datemie 和time兩個包
http://www.2cto.com/kf/201401/276088.html

#其餘的一些技巧
df2[df2['A'].map(lambda x:x.startswith('61'))] #篩選出以61開頭的數據
df2["Author"].str.replace("<.+>", "").head() #replace("<.+>", "")表示將字符串中以」<」開頭;以」>」結束的任意子串替換爲空字符串

commits = df2["Name"].head(15)
print commits.unique(), len(commits.unique()) #獲的NAME的不一樣個數,相似於sql裏面count(distinct name)


#pandas中最核心 最經典的函數apply map applymap

#這三個函數是pandas裏面數據變換的核心 避免了for循環,跟R裏面的apply函數相似
#主要用法不清楚能夠問我

pd.concat([df1,df2],axis=1) 橫向合併 ,沒有axis=1 則縱向合併

相關文章
相關標籤/搜索