熊猫子串

时间:2015-11-09 08:18:27

标签: python pandas

我有以下数据框:

     contract
 0   WTX1518X22
 1   WTX1518X20.5
 2   WTX1518X19
 3   WTX1518X15.5

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

     contract        result
 0   WTX1518X22      22
 1   WTX1518X20.5    20.5
 2   WTX1518X19      19
 3   WTX1518X15.5    15.5

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

编辑:

我已设法根据需要获取“X”的索引位置:

df.['index_pos'] = df['contract'].str.rfind('X', start=0, end=None)

但我仍然无法获得包含“X”后面所有字符的新列。我在尝试:

df['index_pos'] = df['index_pos'].convert_objects(convert_numeric=True)
df['result'] = df['contract'].str[df['index_pos']:]

但这只是给我一个名为'result'的空列。这很奇怪,因为如果我执行以下操作,那么它可以正常工作:

df['result'] = df['contract'].str[8:]

所以我只需要一种不硬编码'8'的方法,而是使用'index_pos'列。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

使用vectorised str.split拆分字符串并将最后一次拆分投射到float

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

答案 1 :(得分:0)

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使用正则表达式的类似方法,这个只假设数字位于字符串的末尾。