1. 程式人生 > 實用技巧 >Pandas系列教程(9)Pandas字串處理

Pandas系列教程(9)Pandas字串處理

Pandas字串處理

前面我們已經使用了字串處理函式:

  df['bWendu'].try.replace('℃', '').astype('int32')

Pandas的字串處理:

1、使用方法:先獲取Series的str屬性,然後在屬性上呼叫函式;

2、只能在字串列上使用,不能在數字列上使用;

3、DataFrame上沒有str屬性和處理方法;

4、Series.str並不是Python原生字串,而是自己的一套方法,不過大部分和原生str很相似

Series.str字串方法列表參考文件

  https://pandas.pydata.org/pandas-docs/stable/reference/series.html#string-handing

本節演示內容:

1、獲取Series的str屬性,然後使用各種字串處理函式

2、使用str的startswith,contains等bool類Series可以做條件查詢

3、需要多次str處理的鏈式操作

4、使用正則表示式處理

1、讀取北京2018年天氣資料

import pandas as pd

file_path = "../../datas/files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
print(df.head())
print(df.dtypes)

2、獲取Series的str屬性,使用各種字串處理函式

import pandas as pd

file_path = "../../datas/files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
print('*' * 25, '列印前幾行資料', '*' * 25)
print(df.head())
print('*' * 25, '列印每列資料型別', '*' * 25)
print(df.dtypes)

print('*' * 25, '獲取Series的str屬性', '*' * 25)
print(df['bWendu'].str)

print('*' * 25, '字串替換函式
', '*' * 25) df['bWendu'].str.replace('', '') print('*' * 25, '判斷是不是數字', '*' * 25) print(df['bWendu'].str.isnumeric()) print('*' * 25, '判斷是不是數字', '*' * 25) print(df['aqi'].str.len())

3、使用str的startswith,contains等得到bool的Series可以做條件查詢

import pandas as pd

file_path = "../../datas/files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)

print('*' * 25, '列印前幾行資料', '*' * 25)
print(df.head())
print('*' * 25, '列印每列資料型別', '*' * 25)
print(df.dtypes)

condition = df['ymd'].str.startswith('2018-03')
print(condition)
print(df[condition].head())

4、需要多次str處理的鏈式操作

怎樣提取201803這樣的數字月份?

1、先將日期2018-03-31替換成20180331的形式

2、提取月份字串201803

import pandas as pd

file_path = "../../datas/files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)

print('*' * 25, '列印前幾行資料', '*' * 25)
print(df.head())
print('*' * 25, '列印每列資料型別', '*' * 25)
print(df.dtypes)

# 先將日期2018-03-31替換成20180331的形式
print('*' * 50)
print(df['ymd'].str.replace('-', ''))

# 每次呼叫函式,都返回一個新的Series
# df['ymd'].str.replace('-', '').slice(0, 6)    # 錯誤寫法
print('*' * 50)
print(df['ymd'].str.replace('-', '').str.slice(0, 6))

# slice就是切片語法,可以直接使用
print('*' * 50)
print(df['ymd'].str.replace('-', '').str[0:6])

5、使用正則表示式處理

import pandas as pd

file_path = "../../datas/files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)

print('*' * 25, '列印前幾行資料', '*' * 25)
print(df.head())
print('*' * 25, '列印每列資料型別', '*' * 25)
print(df.dtypes)


# 新增新列
print('*' * 25, '新增新列', '*' * 25)
def get_nianyyueri(x):
    year, month, day = x['ymd'].split('-')
    return f'{year}年{month}月{day}日'

df['中文日期'] = df.apply(get_nianyyueri, axis=1)
print(df['中文日期'])

# 問題:怎樣將"2018年12月31日"中的年、月、日三個中文字元去掉
# 方法1:鏈式replace
# print(df['中文日期'].str.replace('年', '').str.replace('月', '').str.replace('日', ''))

# 方法2:正則表示式替換(推薦使用)
# Series.str預設就開啟了正則表示式模式
print('*' * 25, '正則表示式替換', '*' * 25)
print(df['中文日期'].str.replace('[年月日]', ''))