删除标点符号时出错:“float”对象没有属性“translate”

Wan*_*rer 1 string python-3.x pandas

我试图通过执行以下操作从数据框中的列中删除标点符号:

def remove_punctuation(text):
      return text.translate(table)

df['data'] = df['data'].map(lambda x: remove_punctuation(x))
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

“float”对象没有属性“translate”

我检查了 col 的 dtype,如下所示:

from pandas.api.types import is_string_dtype
is_string_dtype(df['data'])
Run Code Online (Sandbox Code Playgroud)

并得到以下输出:

真的

我不确定这里出了什么问题?

我还尝试了以下操作:translator = str.maketrans('', '', string.punctuation)

def remove_punctuation(text):
      return text.translate(translator)
df['data'] = df['data'].map(lambda x: remove_punctuation(x))
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误

小智 5

您的 df['data'] 具有 NaN 元素。type(np.nan)是浮动的。因此,在删除标点符号时,您会收到错误“'float' object has no attribute 'translate'”。要解决此问题,您可以

  1. 从 df['data'] 中删除 NaN 元素,或者,
  2. 用于df['data'] = df.fillna({'data':''})用空字符串填充 NaN 值。

一旦处理完 pandas Series 中的 NaN 元素,您就可以使用 map 函数删除标点符号。

希望这可以帮助!