将函数应用于Pandas中数据框列的每一行

时间:2017-11-08 08:57:31

标签: python pandas apply

我在数据框中有一个基于文本的列,类似于以下格式:

  Text
0 I am me
1 I am not you
2 I will be him

我正在尝试运行一个字符串函数来删除最后一个空格(包括空格)之后的任何内容。例如'我就是我'会成为'我是'

代码:

df['Text'] = df['Test'].apply(lambda x: x.str.split(' ').str[:-1].str.join(' '))

但是,这会产生错误:

  

属性错误:' str'对象没有属性' str'

我不太了解,因为apply函数可以自行运行,但在将其应用于数据框中的特定列时似乎只会失败? (和我一样奇怪和错误......)

2 个答案:

答案 0 :(得分:7)

当您使用vanilla字符串时,可以直接调用函数 。直接使用pandas列时,请使用str访问器方法。

案例1
正如我的评论中所述,使用str方法:

df

            Text
0        I am me
1   I am not you
2  I will be him    

df['Text'] = df['Text'].str.split().str[:-1].str.join(' ')

        Text
0       I am
1   I am not
2  I will be

案例2
或者,在单个列上使用apply时,lambda会收到字符串,(而不是pd.Series),因此.str访问者方法不参与。

答案 1 :(得分:1)

我认为你想要重写pandas字符串函数有点慢,但支持NaNs值:

df['Text'] = use_data['Test'].str.split().str[:-1].str.join(' ')

到python字符串函数:

df['Text'] = use_data['Test'].apply(lambda x: ' '.join(x.split(' ')[:-1]))