【PY】pandas 处理 Excel 中错别字修正

10,080 阅读3分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

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

image.png

首先想到的是用 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

image.png

3、然后看一下列标题:

data.columns
Index(['Unnamed: 0', 'context', 'role_id', 'resource', '错别字_paddle', '错标点_paddle'],
      dtype='object')

4、因为需求是只需要对 context 中的错别字进行修正,因此,只需要关注到两列 context错别字_paddle 就行,先看看 错别字_paddle 的情况:

data['错别字_paddle']

image.png

可以看到,从 pandas 导入处理之后,没有数据的值被显示为 NaN,而有数据值的照常显示,比如 [{'position': 18, 'correction': {'的': '地'}}],那接下来如何处理的思路就十分清晰了;

对于不需要修改的句子,也就是 错别字_paddle 这列值为 NaN 的,直接将原句挪回去就行了,因此只需要一个判断条件和 NaN 比较为真就行了,这里的话方法有多种,比较直接的就是使用 pandas 自带的函数 isna()

pd.isna(data.loc[index].values[4])
  • 当值为 NaNimage.png

  • 当值不为 NaNimage.png

当然也可以先通过 type() 函数得知该字段类型为 float但这里有一个坑,直接用 float('nan') 进行判断返回的会是 False,不过可以借助 hash() 函数来进行判断:

hash(float('NaN')) == hash(NaN)

image.png

看实际场景进行选择即可;

对于要修改的句子,不难发现,类似 [{'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'])

image.png

最后就是依照 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()

image.png

后记

以上就是 pandas 处理 Excel 中错别字修正 的全部内容了,讲解了如何通过 pandas 工具包来操作 Excel,结合实际场景,具体问题具体分析,图文并茂,细致的讲解了操作过程以及其中需要注意的细节,希望大家有所收获!

📝 上篇精讲:【PY】Python3 字节码混淆

💖 我是 𝓼𝓲𝓭𝓲𝓸𝓽,期待你的关注;

👍 创作不易,请多多支持;

🔥 系列专栏:PY