iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
AI & Data

資料三十-那些最基本的資料處理與分析技能系列 第 14

【Day14-字串】淺談python中最常用到的str處理方式——格式化、尋找、取代、分割、合併

在資料處理的過程中,我們最常會面對的不外乎四種類型

  • 數值
  • 文字
  • 影像
  • 音訊

因此接下來幾天會稍微針對這些資料的基本操作和認知稍微談一下

str基本操作

如何產生一段字串

字串相接-使用+*

s1 = "pui"
print(s1 + "~") # 字串加法為前後相接
print(s1 * 3) # 字串乘法為重複n次

輸出:

pui~
puipuipui

格式化字串-使用%

如果有寫過C語言的讀者應該對這個符號不陌生,這是個用來控制格式化輸出的符號,在原始字串中透過不同的標記來達成不同輸出格式的結果,常用的格式化符號為:

  • %d:替換掉一個整數
    • %03d:替換掉一個整數,且往前補0到3位為止(超過不影響)
  • %f:替換掉一個浮點數(小數)
    • %.2f:替換掉一個浮點數,且四捨五入到小數點後第2位
  • %s:替換掉另一個字串
print("熱愛%d度的你" % 105) # 取代一個整數
print("%f四捨五入後是%.2f" % (1.234, 1.234)) # 有多個地方需要取代的時候需要用()起來
print("這是一顆%s" % "蘋果")

輸出:

熱愛105度的你
1.234000四捨五入後是1.23
這是一顆蘋果

格式化字串-使用.format()

雖然使用%來格式化字串可以非常清楚的看出要替換掉的格式
但是對於要放什麼變數表示什麼意思進去則比較不具備可讀性
因此這邊提供了另一種方法來在格式化字串的過程中就可以在中間標記不同替換位置的意義

print("熱愛{temperature}度的你".format(temperature=105)) # 用{}包一個名稱,format後面給這個名稱的值
print("{a}四捨五入後是{a:.2f}".format(a=1.234)) # 可以和%一樣指定格式
print("這是一顆{}".format("蘋果")) # {}內沒名稱的話就是按順序對應

輸出:

熱愛105度的你
1.234四捨五入後是1.23
這是一顆蘋果

新方法-fstring(限python3.6以後版本)

而在python3.6之後,又出現了一個更加方便的用法
不用另外再對字串設定一個替換掉的名稱,直接使用原本存在的變數即可
而格式方面也一樣可以調整哦

temperature = 105
a = 1.234
b = "蘋果"

print(f"熱愛{temperature}度的你") # 字串前面加f,中間用{}包變數名稱
print(f"{a}四捨五入後是{a:.2f}") # 可以和%一樣指定格式
print(f"這是一顆{b}") # 但不能和format一樣名稱留空

輸出:

熱愛105度的你
1.234四捨五入後是1.23
這是一顆蘋果

如何在字串中進行尋找?

有的時候我們需要在一個長的字串當中尋找我們的短字串是否被包含在裡面
這個時候根據我們是想要看它在不在或是看它出現在哪裡可以分別使用不同的工具

子字串是否包含在裡面——使用in

print("台灣" in "中國") # 這樣應該就不會被搬運過去了吧?
print("魷魚" in "魷魚遊戲")

輸出:

False
True

子字串在哪裡?——使用findrfind

s2 = "一隻綿羊兩隻綿羊三隻綿羊"
print("第1隻綿羊在", s2.find("綿羊")) # 回傳的是開頭的index
print("最後1隻綿羊在", s2.rfind("綿羊")) # rfind從右邊開始找
print(s2[2:4])
print(s2[10:10+len(s2)])

輸出:

第1隻綿羊在 2
最後1隻綿羊在 10
綿羊
綿羊

分割與合併

有的時候我們也需要對字串去進行分割或是合併的處理——其實之前講過的csv格式也可以直接一行一行讀進來之後這樣處理哦~

以特定字符分割字串——使用.split()

s3 = "1989-06-04" # 一時想不到其他例子,再用個防盜例子
date_list = s3.split("-")
date_list

輸出:

['1989', '06', '04']

以特定字符合併字串——使用.join()

"/".join(date_list) # 把前面的字串放在後面list的每個元素中間

輸出:

'1989/06/04'

如何看待文字資料?

雖然今天講的主要是對於python字串的一些基本處理語法,但也就順便點一下關於我們要如何看待文字資料這件事情

  • 今天數字的資料我們可以很輕易的從它的來解讀它的意義,那文字呢?
  • 對於電腦是怎麼看待這些不同的文字的,是要當成一個一個字母還是一個一個單字呢?
  • 電腦真的認得出來"apple"代表什麼意思嗎?如果不行,那我們要如何把它轉換成可以分析處理的形式呢?
  • 如果我們把不同單字當成不同意思,那"apple"和"apples"又應該看做相同還是不同呢?
  • 還有很多很多需要考慮的...

這邊就先簡單提及一下,希望對於初接觸這塊的讀者們可以在做這些基本處理的過程中就能對後續文字分析可能會遇到的問題先想看看~


上一篇
【Day13-計數】如何快速統計資料出現頻率?——使用Counter或groupby快速計算元素出現個數
下一篇
【Day15-文字】文字資料的基本處理——Token、Stem、Stopword
系列文
資料三十-那些最基本的資料處理與分析技能30

尚未有邦友留言

立即登入留言