String 从DataFrame中的所有行和列中删除标点符号
我正在从Pandas数据帧中包含的字符串中剥离标点符号。例如:String 从DataFrame中的所有行和列中删除标点符号,string,pandas,dataframe,strip,punctuation,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
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.标点符号))
,还是有更简单的方法来实现这一点
我已经看过了关于如何进行剥离的详细答案,但这篇文章似乎讨论了从单个字符串剥离,而不是跨整个数据帧 您可以直接执行
df。替换如下
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
,请在每列上使用dict comprehension和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
谢谢--df.replace
效果很好。但由于某种原因,在我的真实数据上尝试第二种方法时,pd.DataFrame({col:df[col].str.translate(trans)for col in df})
,我看到了AttributeError:'DataFrame'对象没有属性'str'
。看来这可能和我以前的经历有关?我不确定我是否完全理解。我想我会坚持使用df。替换@MichaelBoles:不客气。只需使用df。替换。这是一个推荐的方法。str.translate
是另一种方法,如果您想进一步了解str
访问器方法。与您的情况一样,您的数据帧中有某些内容使其跳闸。因为这不是一个推荐的方法,所以不值得对它吹毛求疵:D