V-Note

A female robot

站点工具


river:20210924_python_excel

Python 操作 Excel,并进行字符串的模糊匹配

涉及到 pandasfuzzywuzzy 这两个库的基础操作。

Pandas 操作 Excel

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)

参考:https://www.cnblogs.com/ymsong/p/12288519.html

Fuzzywuzzy 模糊匹配字符串

类似的,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)

参考:https://zhuanlan.zhihu.com/p/285175930

涉及到的其他一些操作

按相关度倒序排序列表内的字典:

index.sort(key=lambda k: (k.get("approximation")), reverse=True)
river/20210924_python_excel.txt · 最后更改: 2021/09/24 08:17 由 站点编辑