使用apply lambda和str从python列中获取子字符串

时间:2018-12-31 09:20:17

标签: python pandas

我有一个带有Fib列的数据框,我试图从中获取一个子字符串:

任何人都可以告诉我为什么此代码不起作用:

df['new'] = df['Fib'].apply(lambda x:x.str[2:10])
  

AttributeError:'str'对象没有属性'str'

但是,如果我这样做,它将起作用:

df['new_col'] = df['Fib'].astype(str).str[2:10]

我正在尝试使用apply + lambda解决上述问题,只是为了获得一些经验。 谢谢

1 个答案:

答案 0 :(得分:3)

您的代码中的问题是,您lambda沿系列行的apply函数将收到一个显示的字符串。这是一个说明这一点的示例:

df = pd.DataFrame({'num':[1,4,2], 'alpha':['apple','orange','peach']})
df['alpha'].apply(lambda x:type(x))
<class 'str'>
<class 'str'>
<class 'str'>

请注意,Series.str方法仅适用于Series,如文档中明确指出的那样:

  

系列和索引的向量化字符串函数

因此对于您的示例,应避免使用Apply。而是:

df['alpha'].str[2:10]

0     ple
1    ange
2     ach
Name: alpha, dtype: object

如果您要使用apply而不是您提到的内容,则只需lambda x: x[2:10]就可以直接对字符串进行切片:

df['alpha'].apply(lambda x: x[2:10])
0     ple
1    ange
2     ach
Name: alpha, dtype: object