我正在从熊猫数据框中包含的字符串中删除标点符号。例如:
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的详细答案,但看起来该文章涉及的是从单个字符串中剥离数据,而不是在整个数据帧中剥离数据。
您可以按照以下指示直接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