我想在数据帧中创建两个新列。其中houseNumber的第一列仅提取新列中的houseNumber。我可以做到这一点(见列号(。我希望在数字后面有一个新列,其中该列的值有时可以为空。
下面是我希望的结果。
import pandas as pd
data = {'houseNumber':['13', '14-A', '13B', '2-15', '1-15', '1B15', '22 A']}
df = pd.DataFrame(data)
df= df.assign(numbers= df['houseNumber'].str.extract('(d+)').astype(int))
如何才能达到以下结果?
houseNumber numbers afterNumbers
0 13 13 #no value(comment)
1 14-A 14 -A
2 13B 13 B
3 2-15 2 -15
4 1-15 1 -15
5 1B15 1 B15
6 22 A 22 A
您可以将apply
与此function
一起使用。
def split_number(string):
num = ""
i = 0
for s in string:
if s.isdigit():
num+=s
i+=1
else:
break
if i == len(string):
return pd.Series([int(num), ""])
else:
return pd.Series([int(num), string[i:]])
df[['numbers', 'afterNumbers']] = df.apply(lambda row: split_number(row.houseNumber), axis=1)
houseNumber numbers afterNumbers
0 13 13
1 14-A 14 -A
2 13B 13 B
3 2-15 2 -15
4 1-15 1 -15
5 1B15 1 B15
6 22 A 22 A