我使用 pandas 并且我有数据,数据看起来像这样
FirstName LastName StudentID
FirstName2 LastName2 StudentID2
然后我使用
str.split()
根据“空间”将其分割
因此数据在 DataFrame 中将如下所示
[[FirstName, LastName, StudentID],
[FirstName2, LastName2, StudentID2]]
如何只获取每个学生的StudentID并将其保存在新列中?
尝试以下解决方案:
item["x"]["y"].split(' ')[-1]
使用列表理解获取每个拆分字符串的最后一个元素:
ids = [val[-1] for val in your_string.split()]
我想我会添加这个简单的解决方案,它不使用列表或列表理解来拆分现有的列/系列并将拆分中的最后一项存储到 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
你可以这样做:
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
使用数据框构造函数
pd.DataFrame(df.text.str.split(' ').tolist()).iloc[:,0]
Out[15]:
0 FirstName
1 FirstName2
Name: 0, dtype: object
对于 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
或者,如这个答案所示,但使用索引而不是
.get()
:
>>> df["a"].str.split().str[-1]
0 cc
1 zzzz
Name: a, dtype: object
为什么不尝试简单的列表理解
students = [
["FirstName", "LastName", "StudentID"],
["FirstName2", "LastName2", "StudentID2"]
]
print([student[2] for student in students])
将打印
['StudentID', 'StudentID2']