首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将逗号后面的最后一项提取到新列中。

将逗号后面的最后一项提取到新列中。
EN

Stack Overflow用户
提问于 2018-04-04 20:51:12
回答 3查看 6.7K关注 0票数 2

我有一只熊猫数据,实质上是两列9000行。

代码语言:javascript
复制
CompanyName  |  CompanyAddress

地址在表格上

代码语言:javascript
复制
Line1, Line2, ..LineN, PostCode

也就是说,字符串(或dtype 'object')中的逗号分隔项的数量基本不同,我只想取出邮政编码,即字段中最后一个逗号之后的项。

我尝试过Dot notation string manipulation的建议(可能很糟糕):

代码语言:javascript
复制
df_address['CompanyAddress'] = df_address['CompanyAddress'].str.rsplit(', ') 

它只是在字段周围放置“”--我试图隔离任何拆分/分区字符串的最后一个组件,但是没有成功,maxsplit启动了错误。

在EdChums对Pandas split Column into multiple columns by comma的评论之后,我获得了小小的成功

代码语言:javascript
复制
pd.concat([df_address[['CompanyName']], df_address['CompanyAddress'].str.rsplit(', ', expand=True)], axis=1)

但是,在隔离邮政编码的同时,这只会创建多个列,邮政编码在第3-6列中.同样没有好处。

感觉非常接近,请告诉我。

代码语言:javascript
复制
    EmployerName    Address
0   FAUCET INN LIMITED  [Union, 88-90 George Street, London, W1U 8PA]
1   CITIBANK N.A    [Citigroup Centre,, Canary Wharf, Canada Squar...
2   AGENCY 2000 LIMITED     [Sovereign House, 15 Towcester Road, Old Strat...
3   Transform Trust     [Unit 11 Castlebridge Office Village, Kirtley ...
4   R & R.C.BOND (WHOLESALE) LIMITED    [One General Street, Pocklington Industrial Es...
5   MARKS & SPENCER FINANCIAL SERVICES PLC  [Marks & Spencer Financial, Services Kings Mea...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-04 21:09:56

考虑到DataFrame,

代码语言:javascript
复制
df = pd.DataFrame({'Name': ['ABC'], 'Address': ['Line1, Line2, LineN, PostCode']})

    Address                         Name
0   Line1, Line2, LineN, PostCode   ABC

如果您只需要邮编,您可以使用rsplit提取该代码并将其重新分配到列地址。它可以帮你节省一步时间。

代码语言:javascript
复制
df['Address'] = df['Address'].str.rsplit(',').str[-1] 

你会得到

代码语言:javascript
复制
    Address     Name
0   PostCode    ABC

编辑:给出在列表中有地址值的数据

代码语言:javascript
复制
df = pd.DataFrame({'Name': ['FAUCET INN LIMITED'], 'Address': [['Union, 88-90 George Street, London, W1U 8PA']]})

    Address                                         Name
0   [Union, 88-90 George Street, London, W1U 8PA]   FAUCET INN LIMITED

您可以使用

代码语言:javascript
复制
df['Address'] = df['Address'].apply(lambda x: x[0].split(',')[-1])

你会得到

代码语言:javascript
复制
    Address     Name
0   W1U 8PA     FAUCET INN LIMITED
票数 5
EN

Stack Overflow用户

发布于 2018-04-04 21:00:51

只需将现有列重新拆分为2列--现有列和新列。或者两个新列,如果您想要保持现有列不变。

代码语言:javascript
复制
df['Address'], df['PostCode'] = df['Address'].str.rsplit(', ', 1).str

编辑:由于OP的Address列是一个包含一个字符串的列表,这里有一个具体的解决方案:

代码语言:javascript
复制
df['Address'], df['PostCode'] = df['Address'].map(lambda x: x[0]).str.rsplit(', ', 1).str
票数 1
EN

Stack Overflow用户

发布于 2018-04-04 21:02:27

rsplit返回一个列表,尝试rsplit(‘,’)获取源行中的最后一个元素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49660209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档