繁体   English   中英

Pandas - 从字符串中删除前导零而不是从整数中删除

[英]Pandas - Remove leading Zeros from String but not from Integers

我目前在我的数据集中有一列,如下所示:

标识符
09325445
02242456
00马特布朗
0安东尼奥
065824245

列数据类型是对象。 我想要做的是仅从有 string 的列行中删除前导零。 我想保留列行是整数的前导零。

我希望实现的结果:

标识符
09325445
02242456
马特布朗
安东尼奥·K
065824245

我目前使用的代码(不起作用)

def removeLeadingZeroFromString(row):
    if df['Identifier'] == str:
        return df['Identifier'].str.strip('0')
    else:
        return df['Identifier']
        
df['Identifier' ] = df.apply(lambda row: removeLeadingZeroFromString(row), axis=1)

一种方法是尝试将Identifier转换为to_numeric 测试转换值的位置isna ,使用此掩码仅str.lstrip无法转换值的str.lstrip (仅str.lstrip前导零):

m = pd.to_numeric(df['Identifier'], errors='coerce').isna()
df.loc[m, 'Identifier'] = df.loc[m, 'Identifier'].str.lstrip('0')

df

  Identifier
0   09325445
1   02242456
2   MatBrown
3   AntonioK
4  065824245

或者,一种不太可靠但仅适用于数字字符串的方法是测试 where not str.isnumeric

m = ~df['Identifier'].str.isnumeric()
df.loc[m, 'Identifier'] = df.loc[m, 'Identifier'].str.lstrip('0')

*注意如果查找所有数字类型,这很容易失败to_numeric是更好的方法。

示例框架:

df = pd.DataFrame({
    'Identifier': ['0932544.5', '02242456']
})

带有isnumeric示例结果:

  Identifier
0   932544.5  # 0 Stripped
1   02242456

数据框和导入:

import pandas as pd

df = pd.DataFrame({
    'Identifier': ['09325445', '02242456', '00MatBrown', '0AntonioK',
                   '065824245']
})

使用正则表达式replace正向预测

>>> df['Identifier'].str.replace(r'^0+(?=[a-zA-Z])', '', regex=True)
0     09325445
1     02242456
2     MatBrown
3     AntonioK
4    065824245
Name: Identifier, dtype: object

正则表达式:如果在 0s ( (?=...) ) 之后有一个字符 ( [a-zA-Z] ),则在字符串 ( ^ ) 的开头替换一个或多个 0 ( 0+ )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM