我有一个数据框,以及我想从该数据框中的列中删除的字符串列表。但是当我使用替换功能时,这些字符仍然存在。有人可以解释为什么会这样吗?
bad_chars = ['?', '!', ',', ';', "'", '|', '-', '--', '(', ')',
'[', ']', '{', '}', ':', '&', '\n']
并替换:
df2['page'] = df2['page'].replace(bad_chars, '')
当我打印出df2
时:
for index, row in df2.iterrows():
print( row['project'] + '\t' + '(' + row['page'] + ',' + str(row['viewCount']) + ')' + '\n' )
en(The_Voice_(U.S._season_14),613)
答案 0 :(得分:2)
一种方法是使用re
转义您的角色,然后使用pd.Series.str.replace
。
import pandas as pd
import re
bad_chars = ['?', '!', ',', ';', "'", '|', '-', '--', '(', ')',
'[', ']', '{', '}', ':', '&', '\n']
df = pd.DataFrame({'page': ['hello?', 'problems|here', 'nothingwronghere', 'nobrackets[]']})
df['page'] = df['page'].str.replace('|'.join([re.escape(s) for s in bad_chars]), '')
print(df)
# page
# 0 hello
# 1 problemshere
# 2 nothingwronghere
# 3 nobrackets
答案 1 :(得分:1)
使用.str.replace
,并将字符串作为单个管道分隔的字符串传递。您可以使用re.escape()
来逃避该字符串中的正则表达式字符,如@jpp所示。我通过避免迭代来调整他的建议:
import re
df2['page'] = df2['page'].str.replace(re.escape('|'.join(bad_chars)), '')