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

大家好,我是皮皮。

一、前言

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

二、实现过程

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

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

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

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

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

很久之前,我自己也写了一个简单的。
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数据处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【东哥】提出的问题,感谢【论草莓如何成为冻干莓】、【瑜亮老师】给出的思路,感谢【莫生气】、【鶏啊鶏。】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

 End