大家好,我是皮皮。
一、前言
前几天在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 ———————–