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

时间:2019-11-27 22:47:10

标签: 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.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.punctuation)),还是有一种更简单的方法来完成此操作?

我已经查看了有关如何strip punctuation的详细答案,但看起来该文章涉及的是从单个字符串中剥离数据,而不是在整个数据框中进行剥离。

1 个答案:

答案 0 :(得分:1)

您可以按照以下说明直接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使用dict理解并构造新的数据框

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