从 Pandas DataFrame 中的所有行和列中去除标点符号
Strip punctuation from all rows and columns in Pandas DataFrame
我正在从 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']
但我真正想做的是删除整个数据帧中的标点符号,将其另存为新数据帧。
如果我在整个数据帧上尝试相同的方法,它似乎只是 return 我的列名列表:
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
的字典理解并构建新数据框
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
我正在从 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']
但我真正想做的是删除整个数据帧中的标点符号,将其另存为新数据帧。
如果我在整个数据帧上尝试相同的方法,它似乎只是 return 我的列名列表:
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
的字典理解并构建新数据框
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