首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫子串

熊猫子串
EN

Stack Overflow用户
提问于 2015-11-09 08:18:26
回答 2查看 948关注 0票数 2

我有以下数据:

代码语言:javascript
复制
     contract
 0   WTX1518X22
 1   WTX1518X20.5
 2   WTX1518X19
 3   WTX1518X15.5

我需要添加一个新列,包含第一列中最后一个'X‘之后的所有内容。因此,结果将是:

代码语言:javascript
复制
     contract        result
 0   WTX1518X22      22
 1   WTX1518X20.5    20.5
 2   WTX1518X19      19
 3   WTX1518X15.5    15.5

因此,我首先需要找到最后一个'X‘的字符串索引位置(因为字符串中可能有多个'X’)。然后获取一个子字符串,其中包含每一行索引位置后面的所有内容。

编辑:

我设法按要求得到了“X”的索引位置:

代码语言:javascript
复制
df.['index_pos'] = df['contract'].str.rfind('X', start=0, end=None)

但我仍然不能得到一个新的列包含所有字符后面的'X‘。我正在努力:

代码语言:javascript
复制
df['index_pos'] = df['index_pos'].convert_objects(convert_numeric=True)
df['result'] = df['contract'].str[df['index_pos']:]

但这只会给我一个名为“结果”的空列。这很奇怪,因为如果我这样做,它就能正常工作:

代码语言:javascript
复制
df['result'] = df['contract'].str[8:]

因此,我只需要一种方法来不对'8‘进行硬编码,而是使用'index_pos’列。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-09 09:32:57

使用向量str.split拆分字符串并将最后一个拆分转换为float

代码语言:javascript
复制
In [10]:
df['result'] = df['contract'].str.split('X').str[-1].astype(float)
df
​
Out[10]:
       contract  result
0    WTX1518X22    22.0
1  WTX1518X20.5    20.5
2    WTX1518X19    19.0
3  WTX1518X15.5    15.5
票数 4
EN

Stack Overflow用户

发布于 2015-11-09 09:43:18

代码语言:javascript
复制
import pandas as pd
import re as re
df['result'] = df['contract'].map(lambda x:float(re.findall('([0-9\.]+)$',x)[0]))

Out[34]: 
       contract  result
0    WTX1518X22    22.0
1  WTX1518X20.5    20.5
2    WTX1518X19    19.0
3  WTX1518X15.5    15.5

这是一种与EdChump使用正则表达式的方法类似的方法,该方法只假定数字位于字符串的末尾。

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

https://stackoverflow.com/questions/33604931

复制
相关文章

相似问题

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