第八章 文本數(shù)據(jù)

整章知識(shí)架構(gòu)

整章知識(shí)架構(gòu)

一贩疙、str對(duì)象

str 對(duì)象

主要是對(duì)str對(duì)象的一些介紹沐兰,其中str對(duì)象可以使用[]進(jìn)行索引未辆,并且strin類型和object類型的索引結(jié)果不同。

二盒蟆、正則表達(dá)式基礎(chǔ)

正則表達(dá)式基礎(chǔ)

需要將表中的內(nèi)容記牢,正則表達(dá)式匹配的是字符串的一種模式师骗,在寫正則表達(dá)式是历等,一定要準(zhǔn)確寫出和想要匹配字符串模式相同的正則表達(dá)式。

三辟癌、文本處理的五類操作

文本處理的五類基本操作

拆分
使用split函數(shù)對(duì)字符串進(jìn)行拆分寒屯,需要注意的是指定的分隔字符串會(huì)被丟棄。

s = pd.Series(['上海市黃浦區(qū)方浜中路249號(hào)', '上海市寶山區(qū)密山路5號(hào)'])
s.str.split('[市區(qū)路]')
split
str.split

合并

合并
  • join函數(shù)是使用某個(gè)連接符把字符串列表連接起來
s = pd.Series([['a','b'], [1, 'a'], [['a', 'b'], 'c']])
s.str.join('-')
join
  • cat用于合并兩個(gè)序列黍少,可以指定連接的方式為left, right,outer
s1 = pd.Series(['a','b'])
s2 = pd.Series(['cat','dog'])
s2.index = [1, 2]
s1.str.cat(s2, sep='-', na_rep='?', join='outer')
cat

匹配

  • contains和match都支持正則表達(dá)式寡夹,startswith和endswith不支持正則表達(dá)式


    匹配

替換

替換

當(dāng)需要對(duì)不同部分進(jìn)行有差別的替換時(shí),可以利用子組的方法厂置,并且此時(shí)可以通過傳入自定義的替換函數(shù)來分別進(jìn)行處理菩掏,注意group(k)代表匹配到的第k個(gè)子組(圓括號(hào)之間的內(nèi)容)

s = pd.Series(['上海市黃浦區(qū)方浜中路249號(hào)',
                '上海市寶山區(qū)密山路5號(hào)',
                '北京市昌平區(qū)北農(nóng)路2號(hào)'])
pat = '(\w+市)(\w+區(qū))(\w+路)(\d+號(hào))'
city = {'上海市': 'Shanghai', '北京市': 'Beijing'}
district = {'昌平區(qū)': 'CP District',
            '黃浦區(qū)': 'HP District',
            '寶山區(qū)': 'BS District'}
road = {'方浜中路': 'Mid Fangbin Road',
        '密山路': 'Mishan Road',
        '北農(nóng)路': 'Beinong Road'}
def my_func(m):
    str_city = city[m.group(1)]
    str_district = district[m.group(2)]
    str_road = road[m.group(3)]
    str_no = 'No. ' + m.group(4)[:-1]
    return ' '.join([str_city,
                     str_district,
                     str_road,
                     str_no])
s.str.replace(pat, my_func)

out1

可以使用命名子組的方式給子組命名,方式如下

pat = '(?P<group_name>repr)'

提取
extractextractall的區(qū)別是前者只提取一次昵济,后者會(huì)嘗試多次提取智绸,findall會(huì)將匹配結(jié)果放入列表返回

提取
pat = '(?P<市名>\w+市)(?P<區(qū)名>\w+區(qū))(?P<路名>\w+路)(?P<編號(hào)>\d+號(hào))'
s.str.extract(pat)
out

四、常用字符串函數(shù)

常用字符串函數(shù)

字母型函數(shù)
主要是對(duì)字母大小寫的一些變換

字母型函數(shù)

數(shù)值型函數(shù)
將string轉(zhuǎn)換成數(shù)值访忿,errors 有三種類型可選瞧栗,downcast可以指定轉(zhuǎn)換的類型為integersigned醉顽,unsigned沼溜,float

數(shù)值型函數(shù)

統(tǒng)計(jì)型函數(shù)
返回正則匹配的次數(shù)和字符串的長(zhǎng)度

s = pd.Series(['cat rat fat at', 'get feed sheet heat'])
s.str.count('[r|f]at|ee')
s.str.len()
統(tǒng)計(jì)型函數(shù)

格式型函數(shù)
格式型函數(shù)主要分為兩類,第一種是除空型游添,第二種時(shí)填充型系草。其中,第一類函數(shù)一共有三種唆涝,它們分別是strip, rstrip, lstrip找都,分別代表去除兩側(cè)空格、右側(cè)空格和左側(cè)空格廊酣。這些函數(shù)在數(shù)據(jù)清洗時(shí)是有用的能耻,特別是列名含有非法空格的時(shí)候。

格式型函數(shù)

五、練習(xí)

Ex1:房屋信息數(shù)據(jù)集

現(xiàn)有一份房屋信息數(shù)據(jù)集如下:


house data
  1. year列改為整數(shù)年份存儲(chǔ)晓猛。
  2. floor列替換為Level, Highest兩列饿幅,其中的元素分別為string類型的層類別(高層、中層戒职、低層)與整數(shù)類型的最高層數(shù)栗恩。
  3. 計(jì)算房屋每平米的均價(jià)avg_price,以***元/平米的格式存儲(chǔ)到表中洪燥,其中***為整數(shù)磕秤。
# year列改為整數(shù)年分存儲(chǔ)
df.dropna(how = 'any', inplace=True) # 刪除無效項(xiàng)
df['year'] = pd.to_numeric(df['year'].str.extract('(?P<year>[0-9]{4})*').year, errors='ignore', downcast='integer')
df.head(3)

result 1
# floor替換為level,highest兩列
floor = df.floor.str.extract('(?P<Level>[^0-9]+[層]).*[共](?P<Highest>\d+)[層]')
# Highest轉(zhuǎn)化為整數(shù)類型
floor.Highest = pd.to_numeric(floor.Highest, errors='coerce', downcast='integer')
df = pd.concat([floor, df],axis=1)
df.drop(columns=['floor'], inplace=True)
df.head(3)
result 2
# 計(jì)算均價(jià)
aera = pd.to_numeric(df.area.str.extract('(?P<area>\d+.?\d+)').area, errors='coerce', downcast='float')
price = pd.to_numeric(df.price.str.extract('(?P<price>\d+)').price, errors='coerce', downcast='float')
avg_price = price / aera * 10000
avg_price.name = 'avg_price'
avg_price = avg_price.astype('int').astype('string') + '元/平米'
df = pd.concat([df, avg_price], axis=1)
df.head(3)
result 3

Ex2:《權(quán)力的游戲》劇本數(shù)據(jù)集

現(xiàn)有一份權(quán)力的游戲劇本數(shù)據(jù)集如下:


data
  1. 計(jì)算每一個(gè)Episode的臺(tái)詞條數(shù)捧韵。
  2. 以空格為單詞的分割符號(hào)市咆,請(qǐng)求出單句臺(tái)詞平均單詞量最多的前五個(gè)人。
  3. 若某人的臺(tái)詞中含有問號(hào)再来,那么下一個(gè)說臺(tái)詞的人即為回答者蒙兰。若上一人臺(tái)詞中含有n個(gè)問號(hào),則認(rèn)為回答者回答了n個(gè)問題其弊,請(qǐng)求出回答最多問題的前五個(gè)人癞己。
# 計(jì)算臺(tái)詞條數(shù)
df.columns = df.columns.str.strip()
df.groupby(['Season', 'Episode'])['Sentence'].count().head()
result 1
# 計(jì)算平均單詞量最多的前五個(gè)人
df.set_index('Name').Sentence.str.split().str.len().groupby('Name').mean().sort_values(ascending=False).head()
result 2
s.str.count('\?').groupby('Name').sum().sort_values(ascending=False).head()
result 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梭伐,隨后出現(xiàn)的幾起案子痹雅,更是在濱河造成了極大的恐慌,老刑警劉巖糊识,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩社,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赂苗,警方通過查閱死者的電腦和手機(jī)愉耙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拌滋,“玉大人朴沿,你說我怎么就攤上這事“苌埃” “怎么了赌渣?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昌犹。 經(jīng)常有香客問我坚芜,道長(zhǎng),這世上最難降的妖魔是什么斜姥? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任鸿竖,我火速辦了婚禮沧竟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缚忧。我一直安慰自己悟泵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布搔谴。 她就那樣靜靜地躺著魁袜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敦第。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天店量,我揣著相機(jī)與錄音芜果,去河邊找鬼。 笑死融师,一個(gè)胖子當(dāng)著我的面吹牛右钾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旱爆,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼舀射,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了怀伦?” 一聲冷哼從身側(cè)響起脆烟,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎房待,沒想到半個(gè)月后邢羔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桑孩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年拜鹤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片流椒。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敏簿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宣虾,到底是詐尸還是另有隱情惯裕,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布安岂,位于F島的核電站轻猖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏域那。R本人自食惡果不足惜咙边,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一猜煮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧败许,春花似錦王带、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至醋寝,卻和暖如春搞挣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背音羞。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工囱桨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗅绰。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓舍肠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親窘面。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翠语,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容