【问题标题】:ValueError: invalid literal for int() with base 10: 'PKL567'ValueError:int() 的无效文字,基数为 10:'PKL567'
【发布时间】:2021-08-06 15:35:00
【问题描述】:

我有一个数据框,其中包含我选择的几列。在这些列中,我想在其中添加 0 以获得 10 位数字。 这些列由数字组成,但可以是多种类型(object、int 或 float)。当我想先转换为 int(去除小数)然后再转换为 str(进行转换)时,我意识到列中不仅有数字,还有字符串。如何使仅忽略列中的字符串并仅对数字进行转换。

列 = ['a','b','c']

Data[columns] = Data[columns].apply(lambda x: x.astype(int).astype(str).str.zfill(10))

ValueError: int() 以 10 为底的无效文字:'PKL567'

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果有组合字符串和整数,更简单的是不转换为整数,只转换为字符串并在0前面加上zfill,例如:

    columns = ['a','b','c']
    Data[columns] = Data[columns].apply(lambda x: x.astype(str).str.replace('\.0$','').str.zfill(10))
    

    【讨论】:

    • 是的,但是对于某些数字,使用这种方法,例如,当有十进制数字时,我会得到:00393865.0
    • 这很好,但是如何避免在 str 中添加 0 呢?
    • @ascha - 它是自动添加的(因为浮动),所以被.str.replace('\.0$','')删除
    【解决方案2】:

    您可以在列上使用 pandas 的内置字符串替换功能以及正则表达式匹配:

    df = pd.DataFrame(
        {'col': ['PKL567']}
    )
    
          col
    0  PKL567
    
    df['col'] = df['col'].str.replace('[a-zA-Z]', '0')
    
          col
    0  000567
    

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 2018-01-20
      • 2017-12-16
      • 1970-01-01
      相关资源
      最近更新 更多