【问题标题】:Python - Apply rsplit in DataFrame column using lambdaPython - 使用 lambda 在 DataFrame 列中应用 rsplit
【发布时间】:2019-11-21 14:11:32
【问题描述】:

我有一个具有以下结构的数据框(3 列):

DATE,QUOTE,SOURCE
2019-11-21,1ºTEST/2ºTEST DONE, KAGGLE

我要做的是在 QUOTE 列上创建一个子字符串,以便仅使用最后一次出现之后的单词(在本例中为单词“TEST”)生成一个新列。

我的预期结果:

DATE,QUOTE, SATUS, SOURCE
2019-11-21,1ºTEST/2ºTEST DONE, DONE, KAGGLE

为此,我正在尝试使用以下代码:

import pandas as pd
df = pd.read_excel (filename)
split = lambda x: len(x['QUOTE'].rsplit('TEST',1)[0])
df["STATUS"] = df.apply(split, axis=1)
print(df["STATUS"].unique())

但是我只是打印数字而不是“完成”。

我做错了什么?

谢谢!

【问题讨论】:

    标签: python pandas substring strsplit


    【解决方案1】:

    在 split 的定义中你使用len,它返回序列的长度(一个整数),

    len([1, 'Done'])  # returns 2
    

    需要访问最后一个索引,例如:

    df['STATUS'] = df.QUOTE.str.rsplit('TEST').str[-1]
    print(df)
    

    输出

             DATE               QUOTE  SOURCE STATUS
    0  2019-11-21  1ºTEST/2ºTEST DONE  KAGGLE   DONE
    

    或者如果你想使用apply,只需改变split的定义:

    split = lambda x: x['QUOTE'].rsplit('TEST', 1)[-1]
    df["STATUS"] = df.apply(split, axis=1)
    print(df)
    

    输出

             DATE               QUOTE  SOURCE STATUS
    0  2019-11-21  1ºTEST/2ºTEST DONE  KAGGLE   DONE
    

    请注意,使用 lambda 创建命名函数不是很好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 2021-12-23
      • 2022-12-14
      • 2016-11-09
      • 2017-11-24
      • 2018-10-07
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多