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