1629. 按鍵持續時間最長的鍵
866
2022-05-30
Pandas字符串處理
Series.str字符串方法列表參考文檔
文章目錄
Pandas字符串處理
讀取數據
獲取Series的str屬性,使用各種字符串處理函數
使用str的startswith、contains等得到bool的Series可以做條件查詢
需要多次str處理的鏈式操作
使用正則表達式的處理
Pandas的字符串處理:
使用方法:先獲取Series的str屬性,然后在屬性上調用函數;
只能在字符串列上使用,不能數字列上使用;
Dataframe上沒有str屬性和處理方法
Series.str并不是Python原生字符串,而是自己的一套方法,不過大部分和原生str很相似;
本節演示內容:
獲取Series的str屬性,然后使用各種字符串處理函數
使用str的startswith、contains等bool類Series可以做條件查詢
需要多次str處理的鏈式操作
使用正則表達式的處理
讀取數據
import pandas as pd
1
df = pd.read_csv("data.xlsx") df.head()
1
2
3
df.dtypes
1
ymd object bWendu object yWendu object tianqi object fengxiang object fengli object aqi int64 aqiInfo object aqiLevel int64 dtype: object
1
2
3
4
5
6
7
8
9
10
獲取Series的str屬性,使用各種字符串處理函數
df["bWendu"].str
1
1
# 字符串替換函數 df["bWendu"].str.replace("℃", "")
1
2
0 3 1 2 2 2 3 0 4 3 .. 360 -5 361 -3 362 -3 363 -2 364 -2 Name: bWendu, Length: 365, dtype: object
1
2
3
4
5
6
7
8
9
10
11
12
# 判斷是不是數字 df["bWendu"].str.isnumeric()
1
2
0 False 1 False 2 False 3 False 4 False ... 360 False 361 False 362 False 363 False 364 False Name: bWendu, Length: 365, dtype: bool
1
2
3
4
5
6
7
8
9
10
11
12
df["aqi"].str.len()
1
使用str的startswith、contains等得到bool的Series可以做條件查詢
condition = df["ymd"].str.startswith("2018-03")
1
condition
1
0 False 1 False 2 False 3 False 4 False ... 360 False 361 False 362 False 363 False 364 False Name: ymd, Length: 365, dtype: bool
1
2
3
4
5
6
7
8
9
10
11
12
df[condition].head()
1
需要多次str處理的鏈式操作
怎樣提取201803這樣的數字月份?
1、先將日期2018-03-31替換成20180331的形式
2、提取月份字符串201803
df["ymd"].str.replace("-", "")
1
0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: ymd, Length: 365, dtype: object
1
2
3
4
5
6
7
8
9
10
11
12
# 每次調用函數,都返回一個新Series df["ymd"].str.replace("-", "").slice(0, 6)
1
2
使用正則表達式的處理
# 添加新列 def get_nianyueri(x): year,month,day = x["ymd"].split("-") return f"{year}年{month}月{day}日" df["中文日期"] = df.apply(get_nianyueri, axis=1)
1
2
3
4
5
df["中文日期"]
1
0 2018年01月01日 1 2018年01月02日 2 2018年01月03日 3 2018年01月04日 4 2018年01月05日 ... 360 2018年12月27日 361 2018年12月28日 362 2018年12月29日 363 2018年12月30日 364 2018年12月31日 Name: 中文日期, Length: 365, dtype: object
1
2
3
4
5
6
7
8
9
10
11
12
問題:怎樣將“2018年12月31日”中的年、月、日三個中文字符去除?
# 方法1:鏈式replace df["中文日期"].str.replace("年", "").str.replace("月","").str.replace("日", "")
1
2
0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: 中文日期, Length: 365, dtype: object
1
2
3
4
5
6
7
8
9
10
11
12
Series.str默認就開啟了正則表達式模式
# 方法2:正則表達式替換 df["中文日期"].str.replace("[年月日]", "")
1
2
0 20180101 1 20180102 2 20180103 3 20180104 4 20180105 ... 360 20181227 361 20181228 362 20181229 363 20181230 364 20181231 Name: 中文日期, Length: 365, dtype: object
1
2
3
4
5
6
7
8
9
10
11
12
正則表達式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。