鍍金池/ 問答/數(shù)據(jù)分析&挖掘/ 關(guān)于pandas替換數(shù)字的問題

關(guān)于pandas替換數(shù)字的問題

數(shù)據(jù)中每一條記錄都帶有漢字形式的數(shù)字, 例如第一、第二、第三...第十二...第一三四...等等, 需求是把這些替換成相應(yīng)的第1、第2、第3...第12...第134...這樣的形式
如果直接按字符替換的話, 替換了'第一'之后, '第一三四'就變成了'第1三四', 也就沒法再替換了
各位有什么建議?

回答
編輯回答
涼汐
function zh2Number(digit) {
  digit = digit.split('第')[1];
  const zh = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  const unit = ['千', '百', '十'];
  const quot = ['萬', '億', '兆', '京', '垓', '秭', '穰', '溝', '澗', '正', '載', '極', '恒河沙', '阿僧祗', '那由他', '不可思議', '無量', '大數(shù)'];
  let result = 0, quotFlag;

  for (let i = digit.length - 1; i >= 0; i--) {
    if (zh.indexOf(digit[i]) > -1) { // 數(shù)字
      if (quotFlag) {
        result += quotFlag * getNumber(digit[i]);
      } else {
        result += getNumber(digit[i]);
      }
    } else if (unit.indexOf(digit[i]) > -1) { // 十分位
      if (quotFlag) {
        result += quotFlag * getUnit(digit[i]) * getNumber(digit[i - 1]);
      } else {
        result += getUnit(digit[i]) * getNumber(digit[i - 1]);
      }
      --i;
    } else if (quot.indexOf(digit[i]) > -1) { // 萬分位
      if (unit.indexOf(digit[i - 1]) > -1) {
        if (getNumber(digit[i - 1])) {
          result += getQuot(digit[i]) * getNumber(digit[i - 1]);
        } else {
          result += getQuot(digit[i]) * getUnit(digit[i - 1]) * getNumber(digit[i - 2]);
          quotFlag = getQuot(digit[i]);
          --i;
        }
      } else {
        result += getQuot(digit[i]) * getNumber(digit[i - 1]);
        quotFlag = getQuot(digit[i]);
      }
      --i;
    }
  }

  return '第' + result;

  // 返回中文大寫數(shù)字對(duì)應(yīng)的阿拉伯?dāng)?shù)字
  function getNumber(num) {
    for (let i = 0; i < zh.length; i++) {
      if (zh[i] == num) {
        return i;
      }
    }
  }

  // 取單位
  function getUnit(num) {
    for (let i = unit.length; i > 0; i--) {
      if (num == unit[i - 1]) {
        return Math.pow(10, 4 - i);
      }
    }
  }

  // 取分段
  function getQuot(q) {
    for (var i = 0; i < quot.length; i++) {
      if (q == quot[i]) {
        return Math.pow(10, (i + 1) * 4);
      }
    }
  }
}

zh2Number('第一百八十七');  // 第187
2018年6月22日 20:15