Python - 在使用 str.split() 后获取最后一个元素

18

我使用pandas并且我有数据,数据看起来像这样

FirstName LastName StudentID
FirstName2 LastName2 StudentID2

然后我使用 str.split() 函数基于空格将其拆分。

因此,在 DataFrame 中,数据看起来像这样:

[[FirstName, LastName, StudentID],
[FirstName2, LastName2, StudentID2]]

如何仅获取每个学生的学生ID,并将其保存在新列中?

6个回答

34

尝试以下解决方案:

item["x"]["y"].split(' ')[-1]

6
使用列表推导式来获取每个分割字符串的最后一个元素:
ids = [val[-1] for val in your_string.split()]

1
或者你可以使用ids=[val[1] for val in your_string.rsplit(maxsplit=1)],这可能会更快。 :) - xkcdjerry

2

我认为我可以添加一个简单的解决方案,它不使用列表或列表推导式来分割现有的列/系列,并将分割的最后一项存储到数据框中的新列/系列中。

import pandas as pd

data = ['FirstName LastName StudentID',
'FirstName2 LastName2 StudentID2']

df = pd.DataFrame(data=data, columns=['text'])

df['id'] = df.text.str.split(" ").str.get(-1)

输出:

索引 文本 ID

0 名字 姓氏 学生ID 学生ID

0 名字2 姓氏2 学生ID2 学生ID2


这是正确的答案,因为它只使用了向量化操作。 - undefined

1
你可以这样做:

import pandas as pd

data = ['FirstName LastName StudentID',
'FirstName2 LastName2 StudentID2']

df = pd.DataFrame(data=data, columns=['text'])

df['id'] = df.text.apply(lambda x: x.split()[-1])

print(df)

输出

text          id
0     FirstName LastName StudentID   StudentID
1  FirstName2 LastName2 StudentID2  StudentID2

或者,作为一种替代方案:
df['id'] = [x.split()[-1] for x in df.text]
print(df)

输出

text          id
0     FirstName LastName StudentID   StudentID
1  FirstName2 LastName2 StudentID2  StudentID2

0
使用数据框架构造器。
pd.DataFrame(df.text.str.split(' ').tolist()).iloc[:,0]
Out[15]: 
0     FirstName
1    FirstName2
Name: 0, dtype: object

-1
为什么不尝试一下简单的列表推导式呢?
students = [
    ["FirstName", "LastName", "StudentID"],
    ["FirstName2", "LastName2", "StudentID2"]
]

print([student[2] for student in students])

这将会打印出来

['StudentID', 'StudentID2']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接