- 导入测试数据
import pandas as pd
inspection = pd.read_csv('chicago_food_inspections.csv')
使用Series对象的str属性处理字符串
1.去除文本头尾的空格
# 去除头尾空格
inspection["Name"].str.strip()
# 去除左边的空格l
inspection["Name"].str.lstrip()
# 去除右边的空格
inspection["Name"].str.rstrip()
将处理好的字符串重新赋值给Name列
# 将处理好的字符串重新赋值给Name列
inspection["Name"] = inspection["Name"].str.strip()
遇到有很对列需要重新赋值的情况,可以使用colunms属性进行遍历处理
inspection.columns
输出:Index([‘Name’, ‘Risk’], dtype=‘object’)
# 对所有的列遍历
for col in inspection.columns:
print(col)
inspection[col] = inspection[col].str.strip()
2.字符串转大写、转小写、首字母大写、单词首字母大写
# 字符串转大写、转小写、首字母大写、单词首字母大写
inspection['Name'].str.upper().head()
inspection['Name'].str.lower().head()
inspection['Name'].str.capitalize().head()
inspection['Name'].str.title().head()
- 字符串切片操作
# 清洗Risk列数据, 只包含 'Risk 1 (High)', 'Risk 2 (Medium)', 'Risk 3 (Low)','Risk 4(Extreme)'
inspection = inspection.dropna(subset=['Risk'])
inspection['Risk'] = inspection['Risk'].str.replace('All', 'Risk 4(Extreme)')
inspection['Risk'].unique()
# 提取风险等级,以下2种写法等效
inspection['Risk'].str.slice(5,6).head()
inspection['Risk'].str[5:6].head()
# 提取风险描述,以下2种写法等效
inspection['Risk'].str.slice(8,-1).head()
inspection['Risk'].str[8:-1].head()
切片用法跟python的切片用法相同。
- 文本筛选
文本包含,使用str.contains()方法
has_pizza = inspection['Name'].str.lower().str.contains('pizza')
inspection[has_pizza]
文本位于开头、结尾,使用str.startswith()、str.endswith()方法
start_with_tacos = inspection['Name'].str.lower().str.startswith('tacos')
inspection[start_with_tacos]
end_with_inc = inspection['Name'].str.lower().str.endswith('INC.'.lower())
inspection[end_with_inc]
5. 文本拆分
文本拆分,使用str.split()方法
inspection['Risk'].str.split(' ').head()
# n字段 表示最大拆分次数,可以看到两者的区别
inspection['Risk'].str.split(' ', n=1).head()
# expand字段 =True 返回的是一个DataFrame类型数据
inspection['Risk'].str.split(' ',expand=True).head()
想要提取前文的风险等级,可以使用str.get()方法
# 提取前文的风险等级,使用str.get(n)方法
inspection['Risk'].str.split(' ').str.get(1)
小扩展:将风险描述加到原数据中
df_r = inspection['Risk'].str.split(" ", expand=True)
inspection['Risk desc'] = df_r[2]
这里有一个警告:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
解决方法:
inspection.loc[:, 'Risk desc'] = df_r[2]