我有一个pandas数据帧,并且在一个列中有一个字符串,其中的单词用'_'分隔,我想提取该字符串的最后一个元素(是一个数字),并以此创建一个新列。 我尝试了以下
df = pd.DataFrame({'strings':['some_string_25','a_different_one_13','and_a_last_one_40']})
df.assign(number = lambda x: x.strings.str.split('_')[0])
但这在我的最后一列中给了我
number
some
string
25
但是我想得到这个
number
25
13
40
我该怎么做?
答案 0 :(得分:3)
使用Series.str.split
进行拆分,并通过索引选择列表的最后一个值,或者使用Series.str.extract
通过字符串的最后一个整数-(\d+)
用于匹配int,$
用于结尾字符串:
df['last'] = df['strings'].str.split('_').str[-1]
df['last1'] = df['strings'].str.extract('(\d+)$')
print (df)
strings last last1
0 some_string_25 25 25
1 a_different_one_13 13 13
2 and_a_last_one_40 40 40
可能会在已更改的数据中看到差异:
df = pd.DataFrame({'strings':['some_string_25','a_different_one_13','and_a_last_one_40',
'aaaa', 'sss58']})
df['last'] = df['strings'].str.split('_').str[-1]
df['last1'] = df['strings'].str.extract('(\d+)$')
print (df)
strings last last1
0 some_string_25 25 25
1 a_different_one_13 13 13
2 and_a_last_one_40 40 40
3 aaaa aaaa NaN
4 sss58 sss58 58
答案 1 :(得分:1)
可以:
df['number']=df['strings'].apply(lambda row: row.split('_')[-1])
或:
df['number']=[row[-1] for row in df['strings'].str.split('_')]
答案 2 :(得分:0)
请尝试
df = pd.DataFrame({'strings':['some_string_25','a_different_one_13','and_a_last_one_40']})
df['number'] = df.strings.apply(lambda x: x.split('_')[-1])
df