【PY】pandas 处理 Excel 中错别字修正
前言
今天有友友问起来,如何对 Excel 进行操作,对里面的内容进行错别字修正,那接下来由博主来为各位读者细细讲解一番;
首先想到的是用 xlrd
去读取 Excel 里面的内容,不过呢,最新版的 xlrd
已经不支持 .xlsx
了,使用 xlrd
读取 .xlsx
文件时,会报错:XLRDError: Excel xlsx file; not supported
,因此,接下来将使用 pandas
来完成系列操作;
分析
1、首先,导入 pandas
的包:
import pandas as pd
2、读入相关 Excel 的数据,观察一下大致情况:
data = pd.read_excel("1.xlsx")
data
3、然后看一下列标题:
data.columns
Index(['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
,结合实际场景,具体问题具体分析,图文并茂,细致的讲解了操作过程以及其中需要注意的细节,希望大家有所收获!
转载自:https://juejin.cn/post/7166128286811029512