Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫子串_Python_Pandas - Fatal编程技术网

Python 熊猫子串

Python 熊猫子串,python,pandas,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

我有以下数据帧:

     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'列。有什么建议吗?

使用vectoriased拆分字符串,并将最后一次拆分转换为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

与EdChump使用正则表达式的方法类似,这个方法只假设数字在字符串的末尾。

我不想听起来像perl的粉丝,但你试过正则表达式吗?像
df这样简单的东西。contract.str.extract(“%X(.*))
可能已经起作用了。
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