我有一个带有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解决上述问题,只是为了获得一些经验。 谢谢
答案 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