5.1文本提取

【问题描述】

按照要求从给定的文本中提取子文本。[大谦Excel,dqexcel点com]

【示例5-1】

本例使用的Excel文件的完整路径为“D:/Samples/ch05/00 提取子文本/提取省市县.xlsx”。该文件打开后如图5-1所示。要求遍历每行数据,提取出省份(自治区),市(自治州)和县(区)。

Document Image

图5-1 文本提取

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch05/00 提取子文本/提取省市县.xlsx。用pandas导入第1个工作表中的数据,只导入第1列"籍贯"数据,引擎为"openpyxl"。遍历每行数据,提取出省份或自治区,如甘肃省或新疆自治区;提取出市或自治州,如兰州市或昌吉自治州;提取出县或区,如木兰县或城关区。根据“省”、“市”、“县”等关键字在字符串中的位置进行提取,如甘肃省兰州市城关区,“省”、“市”和“区”分别为第3、6和9个字符,则第1-3个字符为省份,第4-6个字符为市,第7-9个字符为区。提取的数据添加在原数据后面,列名为“省(自治区)”、“市(自治州)”和“县(区)”。添加代码注释。

2. ChatGPT提示词模板说明

提取文本可以有多种方法。本例指定根据关键字在字符串中的位置进行提取,并举例说明。

3. 代码

  • 根据提示词得到类似下面的代码:
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())

4. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出提取出的文本。

code.python
>>> == RESTART: D:/Samples/1.py =
              籍贯 省(自治区)   市(自治州)     县(区)
0      甘肃省兰州市城关区    甘肃省      兰州市      城关区
1    黑龙江省哈尔滨市木兰县   黑龙江省     哈尔滨市      木兰县
2  青海省西宁市互助土族自治县    青海省      西宁市  互助土族自治县
3  新疆自治区昌吉自治州奇台县  新疆自治区    昌吉自治州      奇台县
4  甘肃省甘南藏族自治州玛曲县    甘肃省  甘南藏族自治州      玛曲县