软件百科
河畔笔记
网站地图
涉及到 pandas 和 fuzzywuzzy 这两个库的基础操作。
Pandas 不只是用来操作 Excel(完整的文档),对于 xlsx 文件,需要安装 openpyxl 依赖:
pip install pandas pip install openpyxl
可以直接用 read_excel() 读取 xlsx 文件。
首行和表格行数会自动作为索引出现,创建后的变量是 DataFrame 对象:
import pandas as pd data = pd.read_excel(io="xxx.xlsx", sheet_name=0)
也可以直接创建 DataFrame 对象:
from pandas import DataFrame result_file = pd.DataFrame(columns=["1", "2", "3", "4", "5", "6"]) dic1 = {'标题列1': ['张三','李四'], '标题列2': [80, 90] } df = pd.DataFrame(dic1)
可以使用 iloc() 定位表格位置,会自动根据单元格内容转换数据类型(如果预期是 str,可能需要转换),其也可以用来截取表格内容,左闭右开:
data.iloc(x,y) data.iloc(1:,3:5)
将 DataFrame 对象添加行或列后写入文件:
result_file.loc[i] = [1,2,3] data['标题列3'] = None DataFrame(result_file).to_excel("xxx.xlsx", sheet_name='Sheet1', index=False)
类似的,Fuzzywuzzy 需要安装 python-Levenshtein 依赖:
pip install fuzzywuzzy pip install python-Levenshtein
如果安装 python-Levenshtein 报错:
ERROR: Command errored out with exit status 1: error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
可以从这里下载到 whl 安装包,然后:
pip install python_Levenshtein-0.12.2-cp38-cp38-win_amd64.whl
fuzz 模块中,ratio 系列的方法可以在 xxx2 中模糊匹配 xxx 的内容。
会返回一个 int 类型的匹配程度标识,100 是完全匹配,0 是完全不匹配:
from fuzzywuzzy import fuzz fuzz.ratio(xxx, xxx2) # 简单匹配 fuzz.partial_ratio("河南", "河南省") # 非完全匹配:只匹配差异部分 fuzz.token_sort_ratio("西藏 自治区", "自治区 西藏") # 忽略顺序匹配:以空格为分隔符,小写化所有字母,无视空格外的其它标点符号 fuzz.token_set_ratio("西藏 西藏 自治区", "自治区 西藏") # 去重子集匹配:会自动去重并忽略顺序
process 模块中,提取匹配度最高的多条或一条数据:
from fuzzywuzzy import process choices = ["河南省", "郑州市", "湖北省", "武汉市"] process.extract("郑州", choices, limit=2) >>> [('郑州市', 90), ('河南省', 0)] process.extractOne("郑州", choices) >>> ('郑州市', 90) process.extractOne("北京", choices) >>> ('湖北省', 45)