Python - 使用 lambda 在 DataFrame 列中应用 rsplit
Python - Apply rsplit in DataFrame column using lambda
我有一个具有以下结构(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())
但是我只是打印数字而不是 'DONE'。
我做错了什么?
谢谢!
在你使用len的split定义中,returns序列的长度(一个整数),
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 创建命名函数被认为是一种不太好的做法。
我有一个具有以下结构(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())
但是我只是打印数字而不是 'DONE'。
我做错了什么?
谢谢!
在你使用len的split定义中,returns序列的长度(一个整数),
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 创建命名函数被认为是一种不太好的做法。