1. 程式人生 > >利用Python資料分析:資料規整化(五)

利用Python資料分析:資料規整化(五)

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] #對字串進行子串的獲取