【问题标题】:Remove leading zeros or foreign characters in sequence number删除序列号中的前导零或外来字符
【发布时间】:2021-08-18 00:35:05
【问题描述】:

例如:在下面的“示例”列中,我需要删除第 2、3 和 5 列,因为它们要么在开头有前导零,要么在开头有一个特殊字符。

Index Sample
1 12345
2 00152
3 09
4 325
5 .1246

我尝试将“Sample”列数据类型更改为字符串并像这样提取第一个字符:

t = df['Sample'].astype(str).str[0].astype(int)

但它给了我这个输出:

print(t)

 
|   1   |  1  | 
|   2   |  1  | 
|   3   |  9  | 
|   4   |  3  |
|   5   |  0  | 

它想要这样,以便我可以使用索引值删除相应的行:

 
|   1   |  1  | 
|   2   |  0  | 
|   3   |  0  | 
|   4   |  3  |
|   5   |  .  | 

我的方法正确吗?有人可以帮我解决这个问题吗? 非常感谢。

【问题讨论】:

    标签: python pandas dataframe integer string-formatting


    【解决方案1】:

    您可以尝试如下使用str.match

    df = df[df["sample"].str.match(r'[1-9]')]
    

    这只会保留样本值以数字开头的行,而不是零。

    【讨论】:

    • 这也将仅排除“0”。我不知道这是否是用例的问题。
    • @HenryEcker 在这种情况下,我们可以使用:df["sample"].str.match(r'[1-9]|0(?!.)')
    • @TimBiegeleisen 感谢您的回答。我得到了这个错误 - “只能使用带有字符串值的 .str 访问器!”。我之前已将该列转换为字符串。
    • sample 不是字符串列吗?如果没有,那么你怎么能在那里“看到”像00152 这样的值?除非您明确使用格式化函数,否则 Python 永远不会在整数前面打印前导零。
    • @TimBiegeleisen 你是对的!谢谢朋友。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2017-03-17
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多