我有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
答案 0 :(得分:2)
您可以将isin
与string.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)
您也可以使用isnumeric
或isdigit
例如:
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()])