String 从DataFrame中的所有行和列中删除标点符号

String 从DataFrame中的所有行和列中删除标点符号,string,pandas,dataframe,strip,punctuation,String,Pandas,Dataframe,Strip,Punctuation,我正在从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

我正在从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']
但我真正想做的是在整个数据帧中去除标点,并将其保存为新的数据帧

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

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

# ['column 1', 'column 2', 'column 3']
我应该在列之间迭代
line.translate(str.maketrans(“”,,,string.标点符号))
,还是有更简单的方法来实现这一点


我已经看过了关于如何进行剥离的详细答案,但这篇文章似乎讨论了从单个字符串剥离,而不是跨整个数据帧

您可以直接执行
df。替换
如下

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
,请在每列上使用dict comprehension和
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

谢谢--
df.replace
效果很好。但由于某种原因,在我的真实数据上尝试第二种方法时,
pd.DataFrame({col:df[col].str.translate(trans)for col in df})
,我看到了
AttributeError:'DataFrame'对象没有属性'str'
。看来这可能和我以前的经历有关?我不确定我是否完全理解。我想我会坚持使用
df。替换
@MichaelBoles:不客气。只需使用
df。替换
。这是一个推荐的方法。
str.translate
是另一种方法,如果您想进一步了解
str
访问器方法。与您的情况一样,您的数据帧中有某些内容使其跳闸。因为这不是一个推荐的方法,所以不值得对它吹毛求疵:D