【问题标题】:(Python) astype(int) cannot remove leading zeros from object(Python) astype(int) 无法从对象中删除前导零
【发布时间】:2020-12-31 11:20:45
【问题描述】:

新年快乐!

目前我正在处理如下数据框列,重点是 ACCOUNT_NUMBER 列(类型“对象”):

  BRANCH_CODE ACCOUNT_NUMBER  ACCOUNT_HEAD SCHEDULE_DUE_DATE  \
        1    00001838002     211102000               NaT   
        1    00001867003     211102000               NaT   
        1    00001962020     211102000               NaT   
        1    030MZAX9082     211102000               NaT   
        1    00002404079     211102000               NaT   
        1    00010322002     211102000               NaT   
        1    00021070011     211102000               NaT   
        1    091QWEV34QA     211102000               NaT   
        1    00024605002     211102000               NaT   
        1    214QSVC45AX     211102000               NaT 

如您所见,ACCOUNT_NUMBER 中的一些值完全是数字,还有一些是数字和字母的混合。我的目标是将完全是数字的值从“object”转换为“int”,并将数字和字母混合的值保留为“object”(忽略)。为此,我正在尝试以下代码行:

file_consol['ACCOUNT_NUMBER']=file_consol['ACCOUNT_NUMBER'].astype(int,errors='ignore')

但是,代码行无法将数字转换为 int。我在下面尝试了另一种替代方法,但它也不起作用:

file_consol_P['ACCOUNT_NUMBER']=file_consol_P['ACCOUNT_NUMBER'].astype(str).astype(int,errors='ignore')

非常感谢您对此的任何帮助或解释。谢谢!

【问题讨论】:

    标签: python object types integer


    【解决方案1】:

    尝试应用:

    file_consol['ACCOUNT_NUMBER']=file_consol['ACCOUNT_NUMBER'].apply(lambda x: int(x) if all(k.isdigit() for k in x) else x)
    

    输出:

    0        1838002
    1        1867003
    2        1962020
    3    030MZAX9082
    4        2404079
    5       10322002
    6       21070011
    7    091QWEV34QA
    8       24605002
    9    214QSVC45AX
    

    【讨论】:

    • 非常感谢!这很好用,虽然我不确定为什么 astype() 不能做同样的事情(我相信 astype() 应该在这种情况下工作)。
    • @ZackNguyen astype() 在这种情况下不起作用,因为当您执行 astype(str), errors='ignore' 时,它会在遇到错误时返回原始项目,因此原始 df 没有任何变化并且它失败了因为不是列中的每一项都可以转换为int。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 2018-06-16
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多