【问题标题】:Python: Add 0/Zero in a string inside a cellPython:在单元格内的字符串中添加 0/零
【发布时间】:2019-03-20 14:12:05
【问题描述】:

我在一个单元格中有这个示例数据:

EmployeeID

2016-CT-1028
2016-CT-1028
2017-CT-1063
2017-CT-1063
2015-CT-948
2015-CT-948

所以,我的问题是如何在此数据 2015-CT-948 中添加 0 到 让它像这样2015-CT-0948。 我试过这段代码:

pattern = re.compile(r'(\d\d+)-(\w\w)-(\d\d\d)')
newlist = list(filter(pattern.match, idList))

只是为了获得匹配正则表达式模式,然后添加 0zfill() 但它不起作用。拜托,有人能给我一个想法,我该怎么做。无论如何我可以在正则表达式或熊猫中做到这一点。谢谢!

【问题讨论】:

标签: python regex excel pandas


【解决方案1】:

在熊猫中,你可以使用str.replace

df['EmployeeID'] = df.EmployeeID.str.replace(r'-(\d{3})$', r'-0\1', regex=True)


# Output:

0    2016-CT-1028
1    2016-CT-1028
2    2017-CT-1063
3    2017-CT-1063
4    2015-CT-0948
5    2015-CT-0948
Name: EmployeeID, dtype: object

【讨论】:

    【解决方案2】:

    这是使用zfill的一种方法

    例如:

    import pandas as pd
    
    def custZfill(val):
        val = val.split("-")
        #alternative split by last -
        #val = val.rsplit("-",1)
        val[-1] = val[-1].zfill(4)
        return "-".join(val)
    
    df = pd.DataFrame({"EmployeeID": ["2016-CT-1028", "2016-CT-1028", 
                                      "2017-CT-1063", "2017-CT-1063", 
                                      "2015-CT-948", "2015-CT-948"]})
    print(df["EmployeeID"].apply(custZfill))
    

    输出:

    0    2016-CT-1028
    1    2016-CT-1028
    2    2017-CT-1063
    3    2017-CT-1063
    4    2015-CT-0948
    5    2015-CT-0948
    Name: EmployeeID, dtype: object
    

    【讨论】:

    • 如果您的所有答案中有 3 个是正确的怎么办?我必须选择将哪一项标记为正确答案吗?
    【解决方案3】:

    这是一个单行:

    df['EmployeeID'].apply(lambda x: '-'.join(xi if i != 2 else '%04d' % int(xi) for i, xi in enumerate(x.split('-'))))
    

    【讨论】:

      【解决方案4】:

      如果 id 的格式被严格定义,你也可以使用简单的列表推导来完成这项工作:

      ids = [
      '2017-CT-1063',
      '2015-CT-948',
      '2015-CT-948'
      ]
      
      new_ids = [id if len(id) == 12 else id[0:8]+'0'+id[8:] for id in ids]
      print(new_ids) 
      # ['2017-CT-1063', '2015-CT-0948', '2015-CT-0948']
      

      【讨论】:

        【解决方案5】:

        使用 pandas 可以使用 split 而不是正则表达式来解决:

        df['EmployeeID'].apply(lambda x: '-'.join(x.split('-')[:-1] + [x.split('-')[-1].zfill(4)]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-17
          • 2023-03-19
          • 2013-02-04
          • 2016-08-25
          • 1970-01-01
          • 1970-01-01
          • 2017-05-30
          相关资源
          最近更新 更多