将以特定字符开头的字符串移到Pandasdf中的另一列

k2fxgqgv  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(115)

我有一个包含地址的 Dataframe 。
| 地址|
| - ------|
| 爱丁堡科米斯顿彭特兰大道10号,EH10 6PX。|
| 爱丁堡,爱丁堡国际机场|
| 卡尔顿街|
| 交易所公寓,47 Timber Bush,利思EH6 6QH|
我希望用python和panda编写代码,识别行中是否有'EH',然后将此字符和所有后续字符移到另一列,从而实现以下目的:
| 地址|邮政编码|
| - ------|- ------|
| 10 Pentland Drive,科米斯顿,爱丁堡,.|EH10 6PX战斗机|
| 爱丁堡马里广场|EH3|
| 卡尔顿街||
| 交易所公寓,47 Timber Bush,利思EH6 6QH|EH6 6QH|
有人能帮忙吗?

ykejflvf

ykejflvf1#

您可以使用str.extract

df[['Addressess', 'Post Code']] = df['Addressess'].str.extract(r'(.*?)\s*(\bEH\d+[\s\w]*)?\W*$')

regex demo
str.split,如果至少有一行具有邮政编码:

df[['Addressess', 'Post Code']] = df['Addressess'].str.split(r'\s*(?=\bEH\d*)', n=1, expand=True)

regex demo
输出:

Addressess Post Code
0       10 Pentland Drive, Comiston, Edinburgh,  EH10 6PX
1                       Moray Place, Edinburgh,       EH3
2                     Carlton Street, Edinburgh       NaN
3  The Bourse Apartments, 47 Timber Bush, Leith   EH6 6QH
xpcnnkqh

xpcnnkqh2#

使用简单的正则表达式匹配:

df['Post Code'] = df['Addressess'].str.extract('(EH.+)').fillna('')
Addressess  Post Code
0  10 Pentland Drive, Comiston, Edinburgh, EH10 6PX.  EH10 6PX.
1                        Moray Place, Edinburgh, EH3        EH3
2                          Carlton Street, Edinburgh           
3  The Bourse Apartments, 47 Timber Bush, Leith E...    EH6 6QH
qq24tv8q

qq24tv8q3#

下面是使用正则表达式正前瞻的方法:

df['Addressess'].str.split(r'[0-9A-Za-z,] (?=EH)',expand=True).rename({0:'Addressess',1:'Post Code'},axis=1)

相关问题