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

问题描述 投票:0回答:1

我正在从熊猫数据框中包含的字符串中删除标点符号。例如:

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的详细答案,但看起来该文章涉及的是从单个字符串中剥离数据,而不是在整个数据帧中剥离数据。

string pandas dataframe strip punctuation
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.