熊猫数据框拆分并获取列表的最后一个元素

时间:2020-10-21 12:43:05

标签: python pandas list split element

我有一个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

我该怎么做?

3 个答案:

答案 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