我有以下数据:
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']:]但这只会给我一个名为“结果”的空列。这很奇怪,因为如果我这样做,它就能正常工作:
df['result'] = df['contract'].str[8:]因此,我只需要一种方法来不对'8‘进行硬编码,而是使用'index_pos’列。有什么建议吗?
发布于 2015-11-09 09:32:57
使用向量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发布于 2015-11-09 09:43:18
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使用正则表达式的方法类似的方法,该方法只假定数字位于字符串的末尾。
https://stackoverflow.com/questions/33604931
复制相似问题