Pandas系列教程(9)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、使用正则表达式处理
import pandas as pd file_path = "../../datas/files/beijing_tianqi_2018.csv" df = pd.read_csv(file_path) print(df.head()) print(df.dtypes)
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())
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())
怎样提取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])
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('[年月日]', ''))