我有一个带有两个街道地址列的熊猫数据框。我想检查每列中的值,看看它是否以数字开头。然后,我想创建第三列,该列返回以数字开头的字段值。
考虑以下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部分似乎仍然无法正常工作。
感谢您的帮助!
答案 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