【问题标题】:How to filter from a series of numeric values (including NaN) to keep only the numbers that start with a specific digit如何从一系列数值(包括 NaN)中过滤以仅保留以特定数字开头的数字
【发布时间】:2021-08-06 23:44:56
【问题描述】:

我有以下系列:

Num
54321
NaN
1234
1325
92843

我只想保留以 1 开头的数字,输出应如下所示:

Num
1234
1325

我尝试将数字系列转换为字符串,然后使用 str.startswith('1),但没有成功。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以通过布尔掩码尝试:

    mask=(df['Num'].notna()) & (df['Num'].astype(str).str[0].eq('1'))
    #Finally:
    df[mask]
    #OR
    df.loc[mask]
    

    输出:

        Num
    2   1234.0
    3   1325.0
    

    更新:

    对于只有当数字中有5位数字时才保留数字掩码变为:

    df['Num']=df['Num'].astype(str).str.strip('.0')
    mask=(df['Num'].ne('nan') & df['Num'].str[0].eq('1')) & df['Num'].str.len().eq(5)
    

    【讨论】:

    • 我还有一个问题:号码只有5位,如何保留?
    • @EkaraiGlass 包括十进制?
    • @AnuragDabas OP 没有小数问题,所以我认为我们可以否定小数?
    • len(str(df['Num'])) 成功了。谢谢
    • @AnuragDabas 接受
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多