当我访问列以在 python 中应用 lamda 函数时,我不需要双括号吗?



下面的代码从"文本";列,并替换任何非字母数字字符(即#、?.1。等等(。我一直认为自";文本";是一列,我需要在每一侧使用双括号。当我添加时,我会得到下面的错误shwon。单括号不是指行吗?由于";文本";是列我不需要双括号吗?

data['text'] = data['text'].apply((lambda x: re.sub
('[^a-zA-Z0-9s]','',x))) 

在(x(24#删除特殊字符25 data[['text']]=data[['ext']].apply((lambda x:re.sub
--->26('[^a-zA-Z0-9\s]','',x((27

sub中的~\Anaconda3\lib\re.py(pattern,repl,string,count,flags(190是可调用的,它传递了Match对象,必须返回191表示要使用的替换字符串"quot"-->192 return _compile(pattern,flags(.sub(repl,string,count(193194 def-sub(模式,repl,字符串,计数=0,标志=0(:

类型错误:("预期字符串或类似对象的字节","出现在索引文本处"(

单括号表示pd.Series,双括号表示单列数据帧。

df = pd.DataFrame({'Col1':[1,2,3,4]})
type(df['Col1']) # <class 'pandas.core.series.Series'>
type(df[['Col1']]) # <class 'pandas.core.frame.DataFrame'>

你的lambda函数是用来交一个pd系列的。

让我们编写一个自定义函数来分析传递的内容。

def f(x):
print(type(x))
return x
df['Col1'].apply(f)

输出:

<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>

类"int"显示,当对pd.Series调用apply时,该系列中的每个元素都会传递给apply中的函数。

与单列数据帧相比:

df[['Col1']].apply(f)

输出:

<class 'pandas.core.series.Series'>

这表明每个数据帧列(一个pd.Series(都被传递给apply中的函数。

最新更新