Python Pandas lambda函数改变列的所有值?

时间:2017-09-04 01:06:47

标签: python pandas dataframe

我有以下数据框:

AIRCRAFT
B738 (C-GKWJ)
A321 (C-FJNX)

并使用此代码仅提取TYPE,

def extract_type(aircraft):
    return aircraft.split(" ")[0]

data['TYPE'] = data['AIRCRAFT'].apply(lambda x: extract_type(x))

我的期望是:

AIRCRAFT       TYPE
B738 (C-GKWJ)  B738
A321 (C-FJNX)  A321

但是我得到了:

AIRCRAFT       TYPE
B738 (C-GKWJ)  B738 (C-GKWJ)
A321 (C-FJNX)  A321 (C-FJNX)

测试extract_type函数时,它可以正常工作

 def extract_type(aircraft):
     return aircraft.split(" ")[0]

    extract_type("B737 (C-GWJT)")

返回' B737'

为什么它不能处理数据框和lambda函数?感谢

1 个答案:

答案 0 :(得分:1)

您可以使用str.split

data['TYPE'] = data['AIRCRAFT'].str.split().str[0]

你得到了

    AIRCRAFT    TYPE
0   B738 (C-GKWJ)   B738
1   A321 (C-FJNX)   A321

你也可以使用str.extract虽然拆分是理想的

 data['TYPE'] = data['AIRCRAFT'].str.extract('(\w+)\s\(', expand = False)