本篇笔记为原书第六章节的内容。
- Working with text data
本章节主要是对文本数据进行相关操作的。
文本数据本来就是比较“杂乱无章”的,格式也是相对来说比较多样化的,因此在实际应用中对文本数据的预处理是相对来说比较重要,也是相对繁琐的。
字母大小写及空格
- 读取文本文件生成dataframe
import pandas as pd
import numpy as np
inspections_data = './data/pandas_in_action/chicago_food_inspections.csv'
inspections_df = pd.read_csv(inspections_data)
inspections_df
-
处理文本里的空格 df[col].str.rstrip() / df[col].str.lstrip() / df[col].str.strip()
# 循环遍历对各列值进行处理
for col in inspections_df.columns:
inspections_df[col] = inspections_df[col].str.strip()
-
字母大小写或其他格式 lower() / upper() / capitalize() / title()
文本切片处理及字符替换
对某列的文本数据进行初探,查看其实数据情况:
inspections_df['Risk'].unique()
"""
array(['Risk 1 (High)', 'Risk 2 (Medium)', 'Risk 3 (Low)', 'All', nan],
dtype=object)
"""
从上面的结果可看出Risk列里含有5种不同的数据,期中包括All和nan,这就需要我们对其值做一定的预处理,如缺失值处理,字符替换等。
inspections_df = inspections_df.dropna(subset=['Risk'])
inspections_df['Risk'].unique()
"""
array(['Risk 1 (High)', 'Risk 2 (Medium)', 'Risk 3 (Low)', 'All'],
dtype=object)
"""
inspections_df = inspections_df.replace(to_replace='All', value='Risk 4 (Extreme)')
inspections_df['Risk'].unique()
"""
array(['Risk 1 (High)', 'Risk 2 (Medium)', 'Risk 3 (Low)',
'Risk 4 (Extreme)'], dtype=object)
"""
-
字符串切片处理,其实python的字符串处理方法都可以用在此处。
布尔方法
- 文本中是否含有某个字符串片断 str.contains(str1)
- 文本是否以某个字符串片断开始 str.startswith(str1)
- 文本是否以某个字符片断结束 str.endswith(str1)
分割文本数据 str.split()
具体方法操作可借鉴python的string的分割操作split(),这里就不详细记录了。
文本操作含有正则式(regex)
- str.replace(reg1, str1, regex=True)