【问题标题】:Split pandas column and add last element to a new column拆分熊猫列并将最后一个元素添加到新列
【发布时间】:2016-11-24 17:17:50
【问题描述】:

我有一个包含(除其他列之外)全名的 pandas 数据框:

 fullname
 martin master
 andreas test

我想创建一个新列,它将全名列沿空白区域拆分,并将最后一个元素分配给一个新列。结果应如下所示:

 fullname           lastname
 martin master      master
 andreas test       test

我认为它会像这样工作:

df['lastname'] = df['fullname'].str.split(' ')[-1]

但是,我收到了KeyError: -1

我使用[-1],这是拆分组的最后一个元素,以确保我得到真实的姓氏。在某些情况下(例如像 andreas martin master 这样的名字),这有助于获取姓氏,即 master

那么我该怎么做呢?

【问题讨论】:

  • 一键搞定:df[['first_name','last_name']] = df['fullname'].str.split(' ', expand=True)
  • 或者更好df[['first_name','last_name']] = df['fullname'].str.split(expand=True)

标签: python pandas split


【解决方案1】:

您需要另一个 str 来访问每一行的最后一个拆分,您所做的实际上是尝试使用不存在的标签对系列进行索引:

In [31]:

df['lastname'] = df['fullname'].str.split().str[-1]
df
Out[31]:
         fullname lastname
0   martin master   master
1    andreas test     test

【讨论】:

【解决方案2】:

如果需要创建 2 个新列,请使用 str.rsplit 和参数 n=1。如果只需要最后一列,EdChum 解决方案更好:

print (df)
                fullname
0          martin master
1           andreas test
2  andreas martin master

df[['first_name','last_name']] = df['fullname'].str.rsplit(expand=True, n=1)
print (df)
                fullname      first_name last_name
0          martin master          martin    master
1           andreas test         andreas      test
2  andreas martin master  andreas martin    master

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2018-01-03
    • 2021-09-13
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多