利用Python資料分析:資料規整化(五)
阿新 • • 發佈:2019-01-09
import pandas as pd from pandas import Series,DataFrame import numpy as np import re # 計算指標/啞變數(dummy) df = DataFrame({'key':['b','b','a','c','a','b'], 'data1':range(6)}) pd.get_dummies(df['key']) # 根據某一列製造暗變數矩陣 dummies = pd.get_dummies(df['key'],prefix='key') # 給暗變數的列加上一個字首“key” dummies df_with_dummy = df[['data1']].join(dummies) df_with_dummy # 生成新的dataframe mnames = ['movie_id','title','genres'] movies = pd.read_table('pydata-book-master/ch02/movielens/movies.dat',sep='::',header=None, names=mnames) movies[:10] # genres 一行屬於多個分類 genre_iter = (set(x.split('|'))for x in movies.genres) # 將各個類分離出來 genres = sorted(set.union(*genre_iter)) dummies = DataFrame(np.zeros((len(movies),len(genres))),columns=genres) # 構建一個零矩陣 for i ,gen in enumerate(movies.genres): dummies.ix[i,gen.split('|')] = 1 # 將dummies的各行設定為1 dummies movies_windic = movies.join(dummies.add_prefix('Genre_')) # 同原有的資料進行連結 movies_windic.ix[0] values = np.random.rand(10) values # 結合cut之類的離散化函式 bins = [0,0.2,0.4,0.6,0.8,1] pd.get_dummies(pd.cut(values,bins)) # 結合了cut函式 # 字串操作 val = 'a,b, guido' val.split(',')# 保留空白符分割成數段 但是會保留空白符 pieces = [x.strip() for x in val.split(',')] # 去掉空白符 pieces first,second,third = pieces first+'::'+second+'::'+third # 拆分開而後加上新的字元連結 '::'.join(pieces) # 向字元的join方法傳入一個列表或者元組也能完成相同的功能 'guido' in val # in關鍵字來檢查是否在字串內 也可以用find和index val.index(',') val.find(':') # 如果找不到find會返回-1 而index會引發一個異常 val.index(':') val.count(',') # 返回子串出現的次數 val.replace(',','::') # 將一個模式替換成另一個模式 # 在pandas中向量化字串函式 data ={'Dave':'
[email protected]','Steve':'[email protected]', 'Rob':'[email protected]','Wbs':np.nan} data = Series(data) data data.isnull() data.str.contains('gmail') # 使用Series的str來檢查是否含有gmail pattern = "([A-Z0-9._%+0]+)@([[A-Z0-9.-]+)\\.([A-Z]{2,4})" data.str.findall(pattern,flags = re.IGNORECASE) matches = data.str.match(pattern,flags = re.IGNORECASE) matches matches.str.get(1) # 獲取元素使用str.get或者使用索引 matches.str[0] data.str[:5] #對字串進行子串的獲取