第七章 數(shù)據(jù)規(guī)整化:清理、轉(zhuǎn)換、合并、重塑
合并數(shù)據(jù)集
- pandas.merge:根據(jù)鍵將不同DataFrame中的行連接起來(lái)。
#默認(rèn)做inner連接
pandas.merge(df1, df2, on=['key_a', 'key_b',...], how='outer')
# 兩個(gè)對(duì)象列名不同可以分別指定
pandas.merge(df1, df2, left_on='key1', right_on='key2', how='outer')
# left_index=True或right_index=True說(shuō)明索引應(yīng)該被用作連接鍵
pandas.merge(df1,df2,left_on='key',right_index=True)
#對(duì)于層次化索引,必須以列表的形式指明用作合并鍵的多個(gè)列(注意對(duì)重復(fù)索引值的處理)
#join方法
df2.join(df1, how='outer')
軸索引
- pandas.concat:沿著一條軸將多個(gè)對(duì)象堆疊到一起
默認(rèn)axis=0(行),如果axis=1,則結(jié)果變成DataFrame。
合并重疊數(shù)據(jù)
#用df2填補(bǔ)df1的空值
df1.combine_first(df2)
重塑和軸向旋轉(zhuǎn)
重塑層次化索引
- stack():列->行
- unstack():行->列
將“長(zhǎng)格式”旋轉(zhuǎn)為“寬格式”
- pivot('行索引', '列索引', '填充數(shù)據(jù)的列名')
數(shù)據(jù)轉(zhuǎn)換
移除重復(fù)數(shù)據(jù)
- duplicated()
默認(rèn)用于全部列
# 指定列
data.drop_dulicates(['k1'])
利用函數(shù)或映射進(jìn)行數(shù)據(jù)轉(zhuǎn)換
data['新列名'] = data['food'].map(str.lower).map('字典名')
# 或者使用函數(shù)
data['food'].map(lamda x: 字典名[x.lower()])
替換值
- replace()
data.replace(-999, np.nan)
data.replace([-999, -1000], np.nan)
重命名軸索引
rename():創(chuàng)建數(shù)據(jù)集的轉(zhuǎn)換板
#可結(jié)合字典對(duì)象
data.rename(index{'OHIO':'INDIANA'}
,columns={'three':'peekaboo'})
#就地修改
data.rename(inplace=True)
離散化和面元?jiǎng)澐?/h3>
連續(xù)數(shù)據(jù)常常被離散化或拆分為“面元”
- cut
ages = [20, 22, 25, 27, 21, 23, 37, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100] #拆分點(diǎn)
cats = pd.cut(ages, bins, right=True) #設(shè)置右邊是閉端
#自己設(shè)置面元名稱
cats = pd.cut(ages, bins, label=group_names)
#若cut傳入的是面元的數(shù)量,而不是具體的邊界,則根據(jù)數(shù)據(jù)的最大最小值計(jì)算等長(zhǎng)面元
cats = pd.cut(ages, 4, percision=2)
返回一個(gè)特殊的Categorical對(duì)象,有屬性labels, levels, value_counts
- qcut
根據(jù)樣本分位數(shù)對(duì)數(shù)據(jù)進(jìn)行面元?jiǎng)澐郑姑嬖芯哂邢嗤瑪?shù)量的點(diǎn)。
檢測(cè)和過(guò)濾異常值
- any
#選出“超過(guò)3或-3的值”
data[(np.abs(data) > 3).any(1)]
#將值限制在[-3, 3]
data[np.abs(data) > 3] = np.sign(data) * 3
排列和隨機(jī)采樣
- permutation
df.take(np.random.permutation(len(df))[:3])
計(jì)算指標(biāo)/啞變量
- get_dummies
派生K列矩陣
#給指標(biāo)矩陣的列加上前綴,以可以跟其他數(shù)據(jù)合并
dummies = pd.get_dummies(df['key'], prefix='key')
結(jié)果:列'a'變成了'key_a',于是可以跟原矩陣df合并
字符串操作
字符串對(duì)象方法
- split
拆分 - strip
去掉空白符(包括換行符) - join
將列表內(nèi)的字符串用某個(gè)符號(hào)連接
pieces = ['a', 'b', 'c']
val = '::'.join(pieces)
結(jié)果:'a::b::c'
- in
檢測(cè)子串,或者用find或index
注:若找不到字符串,index會(huì)引發(fā)異常,find返回-1 - count
返回指定子串的出現(xiàn)次數(shù) - replace
替換、刪除
val.replace('::', '')
正則表達(dá)式
跳過(guò)
pandas中矢量化的字符串函數(shù)
略