如何在pandas数据帧中替换字符串中的子串

时间:2018-04-14 17:18:15

标签: python string python-3.x pandas dataframe

我有一个数据框,以及我想从该数据框中的列中删除的字符串列表。但是当我使用替换功能时,这些字符仍然存在。有人可以解释为什么会这样吗?

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)

2 个答案:

答案 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)), '')