《利用python進(jìn)行數(shù)據(jù)分析》第七章

第七章 數(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ù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容