将xxx第十三批转为xxx第13批、xxx第十批转为xxx第10批,怎么处理?

2024-02-29 15:34:28 浏览数 (1)

钟鼓馔玉不足贵,但愿长醉不愿醒。

大家好,我是皮皮。

一、前言

前几天在Python白银交流群【东哥】问了一个Pandas数据处理的问题。问题如下所示:我想将xxx第十三批转为xxx第13批、xxx第十批转为xxx第10批、xxx第八批转为xxx第8批?如果我有多个类似这样的数据,最好是有相关的库进行解决,这个该怎么处理好呢?

二、实现过程

这里【瑜亮老师】给了一个指导,如下所示:最简单的思路就是做一个字典,d = {"十三": "13", ……},然后df["合同名称"] = df["合同名称"].replace(d, regex=True)

这个方法确实可行,字典和map这个我也想到了 ,但是确实要写太多了,几十,上百个的话,就难顶了。

后来【论草莓如何成为冻干莓】也给了一个思路,这里需要安装一个库,pip install chinesenumber

经过指导,这个方法顺利地解决了粉丝的问题。

这里也贴下【瑜亮老师】很早之前写的一个代码,其实目的是为了把下载下来的每章小说中的章节中文数字统一改成0001这种长度一致,这样好排序。感兴趣的小伙伴也可以深究下。

代码语言:javascript复制
很久之前,我自己也写了一个简单的。
import re


def cn2dig(cn_num):
    total = 0
    r = 1  # 表示单位:个十百千...
    for i in range(len(cn_num) - 1, -1, -1):
        val = CN_NUM.get(cn_num[i])
        if val >= 10 and i == 0:  # 应对 十三 十四 十*之类
            if val > r:
                r = val
                total = total   val
            else:
                r = r * val
        elif val >= 10:
            if val > r:
                r = val
            else:
                r = r * val
        else:
            total = total   r * val
    return total

CN_NUM = {
    '〇': 0, '零': 0, '一': 1, '壹': 1,
    '二': 2, '贰': 2, '两': 2,
    '三': 3, '叁': 3, '四': 4, '肆': 4,
    '五': 5, '伍': 5, '六': 6, '陆': 6,
    '七': 7, '柒': 7, '八': 8, '捌': 8,
    '九': 9, '玖': 9, '十': 10, '拾': 10,
    '百': 100, '佰': 100, '千': 1000, '仟': 1000,
    '万': 10000, '萬': 10000, '亿': 100000000, '億': 100000000}
data = ['安徽第十三批', '安徽第十批', '安徽第三批', '安徽第二十批']
new_data = []
for i in data:
    cn = re.search(r'[一二三四五六七八九十] ', i).group(0)
    num = str(cn2dig(cn))
    i = i.replace(cn, num)
    new_data.append(i)
print(new_data)

如果你也有类似这种数据分析的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Pandas数据处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

0 人点赞