今天有友友问起来,如何对 Excel 进行操作,对里面的内容进行错别字修正,那接下来由博主来为各位读者细细讲解一番;

首先想到的是用 xlrd 去读取 Excel 里面的内容,不过呢,最新版的 xlrd 已经不支持 .xlsx 了,使用 xlrd 读取 .xlsx 文件时,会报错:XLRDError: Excel xlsx file; not supported,因此,接下来将使用 pandas 来完成系列操作;
1、首先,导入 pandas 的包:
import pandas as pd2、读入相关 Excel 的数据,观察一下大致情况:
data = pd.read_excel("1.xlsx")
data
3、然后看一下列标题:
data.columnsIndex(['Unnamed: 0', 'context', 'role_id', 'resource', '错别字_paddle', '错标点_paddle'],
dtype='object')4、因为需求是只需要对 context 中的错别字进行修正,因此,只需要关注到两列 context 和 错别字_paddle 就行,先看看 错别字_paddle 的情况:
data['错别字_paddle']
可以看到,从 pandas 导入处理之后,没有数据的值被显示为 NaN,而有数据值的照常显示,比如 [{'position': 18, 'correction': {'的': '地'}}],那接下来如何处理的思路就十分清晰了;
对于不需要修改的句子,也就是 错别字_paddle 这列值为 NaN 的,直接将原句挪回去就行了,因此只需要一个判断条件和 NaN 比较为真就行了,这里的话方法有多种,比较直接的就是使用 pandas 自带的函数 isna():
pd.isna(data.loc[index].values[4])NaN 时 
NaN 时 
当然也可以先通过 type() 函数得知该字段类型为 float,但这里有一个坑,直接用 float('nan') 进行判断返回的会是 False,不过可以借助 hash() 函数来进行判断:
hash(float('NaN')) == hash(NaN)
看实际场景进行选择即可;
对于要修改的句子,不难发现,类似 [{'position': 18, 'correction': {'的': '地'}}] 的值的类型为 str,因此我们需要进行一个转换,最快捷的方式就是使用 eval() 函数,不过 eval() 这个函数需要慎重使用,因为存在一定的安全隐患,这里不对外公开的话就不用太考虑这事儿;
将 [{'position': 18, 'correction': {'的': '地'}}] 赋给 v,其类型为 str,通过 eval() 函数就可以得到类型为 list[dic, ... , dic] 的变量 lst,然后按部就班取出其中的值就行:
v = "[{'position': 18, 'correction': {'的': '地'}}]"
lst = eval(v)
print(lst[0]['position'], lst[0]['correction'])
最后就是依照 position 更改字符就行了;
5、完成字符修改之后,我们需要将其导出成 Excel,那么还是借助 pandas,按照其规则导出就行了;
6、整体结构如下所示:
import pandas as pd
data = pd.read_excel("1.xlsx")
fix = []
for index in data.index:
values = data.loc[index].values
if pd.isna(values[4]):
fix.append(values[1])
continue
lst = eval(values[4])
str = list(values[1])
for it in lst:
str[it['position']] = list(it['correction'].values())[0]
fix.append(''.join(str))
dic = {"fixed" : fix}
writer = pd.ExcelWriter("fix.xlsx")
data = pd.DataFrame(dic)
data.to_excel(writer, sheet_name="sheet1")
writer.save()
以上就是 pandas 处理 Excel 中错别字修正 的全部内容了,讲解了如何通过 pandas 工具包来操作 Excel,结合实际场景,具体问题具体分析,图文并茂,细致的讲解了操作过程以及其中需要注意的细节,希望大家有所收获!