【问题描述】
按照要求从给定的文本中提取子文本。[大谦Excel,dqexcel点com]
【示例5-1】
本例使用的Excel文件的完整路径为“D:/Samples/ch05/00 提取子文本/提取省市县.xlsx”。该文件打开后如图5-1所示。要求遍历每行数据,提取出省份(自治区),市(自治州)和县(区)。
图5-1 文本提取
- 编写下面的代码:
code.python
import pandas as pd
# 读取Excel文件中第一个工作表的数据,只保留“籍贯”这一列数据,引擎为openpyxl
data = pd.read_excel("D:/Samples/ch05/00 提取子文本/提取省市县.xlsx", sheet_name=0, usecols=[0], engine='openpyxl')
# 定义三个空列表用于存储提取出来的省、市和县
province = []
city = []
county = []
# 遍历每行数据
for val in data['籍贯']:
# 定义三个变量用于记录关键字在字符串中的位置,初始值为-1
prov_pos = -1
city_pos = -1
county_pos = -1
# 在字符串中查找“省”或“自治区”的位置
for kw in ["省", "自治区"]:
if kw in val:
prov_pos = val.find(kw) + len(kw)
province.append(val[:prov_pos]) # 添加提取出的省份或自治区到列表中
break
# 在字符串中查找“市”或“自治州”的位置
for kw in ["市", "自治州"]:
if kw in val:
city_pos = val.find(kw) + len(kw)
city.append(val[prov_pos:city_pos]) # 添加提取出的市或自治州到列表中
break
# 在字符串中查找“县”或“区”的位置
for kw in ["县", "区"]:
if kw in val:
county_pos = val.find(kw) + len(kw)
county.append(val[city_pos:county_pos]) # 添加提取出的县或区到列表中
break
# 将三个列表添加到原数据中,列名依次为“省(自治区)”、“市(自治州)”和“县(区)”
data['省(自治区)'] = province
data['市(自治州)'] = city
data['县(区)'] = county
# 打印处理后的数据
print(data.head())
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出提取出的文本。
code.python
>>> == RESTART: D:/Samples/1.py =
籍贯 省(自治区) 市(自治州) 县(区)
0 甘肃省兰州市城关区 甘肃省 兰州市 城关区
1 黑龙江省哈尔滨市木兰县 黑龙江省 哈尔滨市 木兰县
2 青海省西宁市互助土族自治县 青海省 西宁市 互助土族自治县
3 新疆自治区昌吉自治州奇台县 新疆自治区 昌吉自治州 奇台县
4 甘肃省甘南藏族自治州玛曲县 甘肃省 甘南藏族自治州 玛曲县