Pandas - 获取 str.split() 之后的最后一个元素

问题描述 投票:0回答:7

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

FirstName LastName StudentID
FirstName2 LastName2 StudentID2

然后我使用

str.split()

根据“空间”将其分割

因此数据在 DataFrame 中将如下所示

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

如何只获取每个学生的StudentID并将其保存在新列中?

python pandas split
7个回答
36
投票

尝试以下解决方案:

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

7
投票

使用列表理解获取每个拆分字符串的最后一个元素:

ids = [val[-1] for val in your_string.split()]

3
投票

我想我会添加这个简单的解决方案,它不使用列表或列表理解来拆分现有的列/系列并将拆分中的最后一项存储到 DataFrame 中的新列/系列中

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


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

0
投票

对于 OP 的特殊情况,另一种方法是使用

.extract()
并捕获所需的字符串块,而不创建中间列表:

>>> import pandas as pd # 2.0.3
>>> df = pd.DataFrame({"a": ["aaa bb cc", "xx y zzzz"]})
>>> df["a"].str.extract(r"(\S+)$")
      0
0    cc
1  zzzz

正则表达式

(\S+)$
抓取字符串末尾的一个或多个非空格字符。如果存在尾随空格,
(\S+)\s*$
很有用。


这个答案很好地展示了中间列表的想法,但是您可以使用索引而不是

.get()

>>> df["a"].str.split().str[-1]
0      cc
1    zzzz
Name: a, dtype: object

另请参阅选择 pandas 数据框中列表的最后一个元素


-2
投票

为什么不尝试简单的列表理解

students = [
    ["FirstName", "LastName", "StudentID"],
    ["FirstName2", "LastName2", "StudentID2"]
]

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

将打印

['StudentID', 'StudentID2']
© www.soinside.com 2019 - 2024. All rights reserved.