基于字符串字段是否以数字开头的语句

时间:2018-10-18 17:40:17

标签: python python-3.x pandas if-statement

我有一个带有两个街道地址列的熊猫数据框。我想检查每列中的值,看看它是否以数字开头。然后,我想创建第三列,该列返回以数字开头的字段值。

考虑以下df:

df = pd.DataFrame({"A":["123 Fake St","456 Fake St","Crown Building","Other Building"], 
                   "B":["Dorm","12 Dorm","34 Dorm","Other Dorm"]})

如果两个字段或两个字段都不以数字开头,则它应返回列A。因此第三列将是:

123 Fake St
456 Fake St
34 Dorm
Other Building

我尝试使用np.where:

df['C'] = np.where(df['A'][0].isdigit(), df['A'], df['B'])

我猜如果两个都不以数字开头的话,就不会考虑返回“ A”。该语句的.isdigit部分似乎仍然无法正常工作。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要使用.str方法将每个单元格值切片为字符串,而不是将列整体切片。

然后要处理两个列值都不以数字开头的情况,则需要添加此附加条件。

这是一个例子:

a_is_digit = df.A.str[0].str.isdigit()
neither_is_digit = ~df.A.str[0].str.isdigit() & ~df.B.str[0].str.isdigit()
mask = a_is_digit | neither_is_digit
df['C'] = np.where(mask, df.A, df.B)

结果:

                A           B               C
0     123 Fake St        Dorm     123 Fake St
1     456 Fake St     12 Dorm     456 Fake St
2  Crown Building     34 Dorm         34 Dorm
3  Other Building  Other Dorm  Other Building