从 Pandas DataFrame 中的所有行和列中去除标点符号

Strip punctuation from all rows and columns in Pandas DataFrame

我正在从 Pandas 数据帧中包含的字符串中去除标点符号。例如:

import pandas as pd
df = pd.DataFrame(data = [['a.b', 'c_d', 'e^f'],['g*h', 'i@j', 'k&l']], 
                  columns = ['column 1', 'column 2', 'column 3'])

我已成功使用列表推导去除列中的标点符号:

import string
df_nopunct = [line.translate(str.maketrans('', '', string.punctuation)) 
    for line in list(df['column 1'])]

# ['ab', 'gh']

但我真正想做的是删除整个数据帧中的标点符号,将其另存为新数据帧

如果我在整个数据帧上尝试相同的方法,它似乎只是 return 我的列名列表:

df_nopunct = [line.translate(str.maketrans('', '', string.punctuation)) 
    for line in list(df)]

# ['column 1', 'column 2', 'column 3']

我应该跨列迭代 line.translate(str.maketrans('', '', string.punctuation)),还是有更简单的方法来完成此操作?

我查看了有关如何 strip punctuation 的详细答案,但看起来那篇文章涉及从单个字符串中剥离,而不是跨整个数据帧。

你可以直接df.replace如下

import string
df_trans = df.replace('['+string.punctuation+']', '', regex=True)

Out[766]:
  column 1 column 2 column 3
0       ab       cd       ef
1       gh       ij       kl

如果您更喜欢使用 translate,请在每一列上使用带有 str.translate 的字典理解并构建新数据框

import string
trans = str.maketrans('', '', string.punctuation)
df_trans = pd.DataFrame({col: df[col].str.translate(trans) for col in df})

Out[746]:
  column 1 column 2 column 3
0       ab       cd       ef
1       gh       ij       kl