真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【Python自動(dòng)化Excel】Python與pandas字符串操作

Python之所以能夠成為流行的數(shù)據(jù)分析語(yǔ)言,有一部分原因在于其簡(jiǎn)潔易用的字符串處理能力。

讓客戶(hù)滿意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、平房網(wǎng)站維護(hù)、網(wǎng)站推廣。

Python的字符串對(duì)象封裝了很多開(kāi)箱即用的內(nèi)置方法,處理單個(gè)字符串時(shí)十分方便;對(duì)于Excel、csv等表格文件中整列的批量字符串操作,pandas庫(kù)也提供了簡(jiǎn)潔高效的處理函數(shù),幾乎與內(nèi)置字符串函數(shù)一一對(duì)應(yīng)。也就是說(shuō):

  • 單個(gè)字符串處理,用Python內(nèi)置的字符串方法;

  • 表格整列的字符串處理,用pandas庫(kù)中的字符串函數(shù);

本文就以常用的數(shù)據(jù)處理需求,來(lái)對(duì)比使用以上兩種方式的異同,從而加深對(duì)Pythonpandas字符串操作的理解。(本文所有數(shù)據(jù)都是為了演示用的假數(shù)據(jù),切勿當(dāng)真?。?/p>

)

一、替換(去除空格)

場(chǎng)景:在問(wèn)卷收集的姓名字段中,不少填寫(xiě)者會(huì)誤輸入空格,造成數(shù)據(jù)匹配不一致的問(wèn)題。

Python

names='劉備、關(guān)羽、張飛、趙云、馬超、黃忠'
names=names.replace('','')
print(names)

output

劉備、關(guān)羽、張飛、趙云、馬超、黃忠

pandas

df['姓名']=df['姓名'].str.replace('','')

output

pandas替換空格

二、分列

場(chǎng)景:在問(wèn)卷收集數(shù)據(jù)的時(shí)候,多選題的數(shù)據(jù)往往是帶有分隔符的。在分類(lèi)匯總前往往需要按分隔符進(jìn)行分列。

問(wèn)卷中多選數(shù)據(jù)導(dǎo)出

Python

hobbyStr="足球┋排球┋羽毛球┋籃球"
hobbyList=hobbyStr.split('┋')

output

['足球','排球','羽毛球','籃球']

pandas

#利用split進(jìn)行分列,expand=True返回dataframe;expand=False返回Series
hobbyDf=df['愛(ài)好'].str.split('|',expand=True)
#將hobbyDf與df安裝索引合并
df2=pd.merge(df,hobbyDf,how="left",left_index=True,right_index=True)
分列、合并、導(dǎo)出Excel后效果

三、切片:截取數(shù)據(jù)

字符串是由一個(gè)個(gè)字符組成的序列,在Python中可以直接對(duì)字符串進(jìn)行切片操作,來(lái)進(jìn)行截取數(shù)據(jù)。

如“XX市四季家園二區(qū)22幢203室”,可以看作是下圖中16個(gè)字符值組成的序列。而切片的語(yǔ)法是:

Python切片原理

Python

addressStr="XX市四季家園二區(qū)22幢203室"
print(f"城市:{addressStr[:3]}")
print(f"小區(qū):{addressStr[3:9]}")

output

城市:XX市
小區(qū):四季家園二區(qū)

pandas

  • 提取城市名稱(chēng),由于城市名稱(chēng)的字?jǐn)?shù)相同,可以直接切片截取前三個(gè)。
df["城市"]=df["地址"].str[:3]
提取城市
  • 提取小區(qū)名,稍有點(diǎn)復(fù)雜。因?yàn)樾^(qū)名稱(chēng)長(zhǎng)度是不一樣長(zhǎng)的。可以利用字符串處理的天花板:正則表達(dá)式。詳細(xì)處理方法,見(jiàn)下文五、正則表達(dá)式示例1。

四、補(bǔ)齊數(shù)據(jù)

有時(shí)候,我們?cè)陔娔X中按文件名排序的時(shí)候,你可能會(huì)遇到下面的情況:

數(shù)值排序和字符排序

在不同系統(tǒng)中,我們希望是按數(shù)值排序,但偏偏系統(tǒng)卻是按字符排序的,如某些車(chē)載播放器中。比較好的解決方法就是在前面添加0,補(bǔ)齊數(shù)據(jù)位數(shù)。數(shù)據(jù)量大的時(shí)候,手動(dòng)修改很麻煩,Python字符串處理的zfill()函數(shù)就可以解決這個(gè)問(wèn)題。

Python

myStr="1章節(jié)"
print(myStr.zfill(4))#整個(gè)字符串補(bǔ)齊到4位

output

01章節(jié)

pandas

df["新文件名"] = "第"+df["文件名"].str[1:].str.zfill(8)
image-

配合os.rename()便可以批量重命名。關(guān)鍵代碼如下

df.apply(lambdax:os.rename(path+x["文件名"],path+x["新文件名"]),axis=1)
批量重命名演示

五、正則表達(dá)式

遇到復(fù)雜的字符串處理需求時(shí),Python有優(yōu)勢(shì)就可以體現(xiàn)出來(lái)了。因?yàn)閜ython和pandas有一個(gè)超強(qiáng)的字符串處理武器:正則表達(dá)式。正則表達(dá)式可以匹配字符串的格式特點(diǎn),如電子郵箱的地址格式、網(wǎng)址的地址格式、電話號(hào)碼格式等。如何寫(xiě)好正則表達(dá)式,這是一門(mén)精深的學(xué)問(wèn),本文介紹幾個(gè)正則表達(dá)式的常用案例,淺嘗輒止。

注:Python默認(rèn)不支持正則表達(dá)式語(yǔ)法,而pandas直接支持正則表達(dá)式語(yǔ)法,這里重點(diǎn)介紹pandas處理表格數(shù)據(jù)。

1.提取長(zhǎng)度不一樣的小區(qū)名

思路:

  • 提取上面小區(qū)名,可以歸納一下地址中小區(qū)名的格式特點(diǎn):蘇州市之后,幢號(hào)數(shù)字之前的中文字符。

  • Seriesstr.extract(),可用正則從字符數(shù)據(jù)中抽取匹配的數(shù)據(jù);

##匹配中文字符的正則表達(dá)式:[\u4e00-\u9fa5]
pattern=r'蘇州市([\u4e00-\u9fa5]+)[0-9]+幢'
df["小區(qū)"]=df["地址"].str.extract(pattern,expand=False)
提取小區(qū)名

2.提取幾幢幾室

思路:幾幢幾室,格式都是數(shù)字+幢數(shù)字+室

  • 數(shù)字可以用[0-9]\d來(lái)匹配;
  • +表示1個(gè)或多個(gè)。
pattern=r'([0-9]+)幢'
df["幢號(hào)"]=df["地址"].str.extract(pattern,expand=False)

pattern=r'(\d+)室'
df["室號(hào)"]=df["地址"].str.extract(pattern,expand=False)
提取幢號(hào)室號(hào)

六、apply函數(shù)

apply 函數(shù):可以對(duì)DateFrame進(jìn)行逐行或逐列進(jìn)行處理。

1.增加一列,將幢號(hào)按照奇偶數(shù)分類(lèi)

將幢號(hào)為奇數(shù)的為A區(qū),偶數(shù)的為B區(qū)

#定義處理的函數(shù),共apply函數(shù)調(diào)用,傳入的參數(shù)為一個(gè)Series對(duì)象
defmy_func(series):
if(series["幢號(hào)"])%2!=0:
return"A區(qū)"
else:
return"B區(qū)"

df["幢號(hào)分類(lèi)"]=df.apply(my_func,axis=1)

上述代碼中apply函數(shù),有兩個(gè)參數(shù)

  • 第一個(gè)參數(shù):處理邏輯的函數(shù)名。主要傳入名稱(chēng),這里為my_func;
  • 第二個(gè)參數(shù):axis = 1,表示按列處理。即傳入的是每一行的Series。

output

apply映射分類(lèi)

2.增加一列,字典映射

defmy_func2(series):
#映射字典,key為小區(qū)名,value為小區(qū)稱(chēng)號(hào)
my_dict={
'吉祥如意家園':'最佳好運(yùn)小區(qū)',
'科技村':'最佳科創(chuàng)小區(qū)',
'四季家園':'最佳風(fēng)光小區(qū)',
'萬(wàn)象更新家園':'最佳風(fēng)采小區(qū)',
}
#每一行小區(qū)名稱(chēng),切片截取至倒數(shù)第2個(gè),即-2
nameKey=series['小區(qū)'][:-2]
returnmy_dict[nameKey]

df["小區(qū)稱(chēng)號(hào)"]=df.apply(my_func2,axis=1)

output

apply匹配映射

結(jié)語(yǔ)

本文演示的字符串操作:替換、分列切片截取、補(bǔ)齊數(shù)據(jù)、正則表達(dá)式apply()函數(shù)常見(jiàn)于數(shù)據(jù)分析的數(shù)據(jù)清洗環(huán)節(jié),替換、分列、切片截取在Excel中也很容易實(shí)現(xiàn),正則表達(dá)式可以說(shuō)是Python處理復(fù)雜字符串問(wèn)題的一大利器,apply()函數(shù)可以實(shí)現(xiàn)自定義函數(shù)處理表格型的數(shù)據(jù),十分靈活、威力巨大。由于篇幅有限,正則表達(dá)式、apply()函數(shù)本文就點(diǎn)到為止,今后值得整理更多相關(guān)案例。


網(wǎng)站題目:【Python自動(dòng)化Excel】Python與pandas字符串操作
分享路徑:http://weahome.cn/article/dsoghid.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部