删除列中以熊猫数据框中的非数字开头的记录

时间:2019-05-08 10:51:40

标签: python pandas

我有3个columna的pandas数据框,我想对OIB列执行健全性检查,以删除OIB下以非数字开头的观察值。

样本DF如下:我想从非数字开始删除具有OIB的3行。

   subscriber_id          msisdn         oib

1:    BP12192064 385989105724 19958945074

2:    KP12192064 385989105774 09958945074

3:    KP12192064 385989105774 A9958945074

我在R中尝试了以下方法:

sym <- unique(df[!substr(oib, 1, 1) %in% (0:9), list(symb = substr(oib, 1, 1))])

df <- df[!substr(oib, 1, 1) %in% symbols[, symb]]

我想要以上代码在Python中的预期输出为:

subscriber_id          msisdn         oib

1:    BP12192064 385989105724 19958945074

2:    KP12192064 385989105774 09958945074

4 个答案:

答案 0 :(得分:2)

您可以将isinstring.digits一起使用:

from string import digits

df[df['oib'].str[0].isin(list(digits))]

答案 1 :(得分:1)

df[~df.oib.str.contains('[A-Za-z\W]', regex=True)]

输出

subscriber_id        msisdn          oib
1:    BP12192064  385989105724  19958945074
2:    KP12192064  385989105774  09958945074

答案 2 :(得分:1)

Series.str.contains^一起用于字符串的开头,将\d用于匹配号码:

df = df[df['oib'].str.contains('^\d')]
print (df)
   subscriber_id        msisdn          oib
1:    BP12192064  385989105724  19958945074
2:    KP12192064  385989105774  09958945074

答案 3 :(得分:1)

您也可以使用isnumericisdigit

例如:

import pandas as pd

df = pd.DataFrame({"subscriber_id": ["BP12192064", "KP12192064",  "KP12192064"],
                   "msisdn": ["385989105724", "385989105774", "385989105774"],
                   "oib": ["19958945074", "09958945074", "A9958945074"]})

print(df[df["oib"].str[0].str.isnumeric()])
print("--")
print(df[df["oib"].str[0].str.isdigit()])