Python 如何有效地删除Pandas中字符串开头和结尾的字符(如果可用)?

Python 如何有效地删除Pandas中字符串开头和结尾的字符(如果可用)?,python,pandas,replace,Python,Pandas,Replace,这个想法是删除句号、逗号和引号(如果在Pandas的开头和最后一个字符串中可用) 给出如下所示的df data = {'Name': ['"Tom hola.', '"nick"', 'krish here .','oh my *']} 预期产量为 Tom hola nick krish here oh my 我尝试了下面的代码,但没有按预期的那样工作 import pandas as pd df = pd.DataFrame(data) df['Name']

这个想法是删除句号、逗号和引号(如果在Pandas的开头和最后一个字符串中可用)

给出如下所示的
df

data = {'Name': ['"Tom hola.', '"nick"', 'krish here .','oh my *']}
预期产量为

Tom hola
nick
krish here
oh my
我尝试了下面的代码,但没有按预期的那样工作

import pandas as pd
df = pd.DataFrame(data)
df['Name'] = df['Name'].str[-1:].replace({"\. ": "Na"},regex=True)
请问如何达到这个目标

此外,该方法是否可以扩展,以便在不同的列中应用?

如果您希望仅替换列,则可以使用其他列

  • 关于答案中使用的正则表达式模式
编辑:

您可以使用
pd.Series.str.strip
来剥离
*

df['Name'].str.strip(r'\"\.\*')

0       Tom hola
1           nick
2    krish here
3         oh my
Name: Name, dtype: object

# OR
df.Name.str.replace(r'^\W+|(.*?)\W+$',r'\1') # Replaces only values in `Name`
# df.replace(r'^\W+|(.*?)\W+$',r'\1',regex=True) Replaces for whole df
  • 关于第二种情况中使用的正则表达式模式的更多信息
如果要匹配字符串末尾的所有特殊字符,请使用
(\W)*$

df = pd.DataFrame({'Name': ['Tom hola.', 'secondx //', 'nick', 'krish here .']})
df['Name'] = df['Name'].replace({r'(\W)*$': ""}, regex=True)
输出:

         Name
0     Tom hola
1    secondx 
2        nick
3  krish here

您可以使用来测试并更好地理解您的正则表达式正在做什么

谢谢@Ch3steR。我想扩展这种方法,以便它也可以删除符号
。但将
r'\.$'
替换为
r'\“$”
什么也不做。。另外,如果
$
指示字符串的结尾,是否有任何特殊符号指示第一个字符串?是的,使用
^
作为字符串的开头@Balandongivt感谢@Ch3steR的及时回复。但是,在使用df.replace(r'\“$”,'',regex=True)时,仍然无法替换字符串末尾的开头引号。这也适用于使用df.replace(r'\“^','',regex=True)删除前面相同的特殊字符@balandongiv编辑了答案。看看是否有帮助如果您有任何疑问,请随时询问。@balandongiv又添加了一个选项。不是一个正则表达式专家可能存在一个比我发布的正则表达式多得多的正则表达式,但这应该让你开始了。感谢你的回复,为了让这个方法更进一步,我将
{r'(\W)*$:“}
替换为
{r'(\W)*^':“}
以删除开头的特殊字符,但是,它无法正常工作。要在开始时删除,可以使用
r'^(\W)*'
。如果您想同时执行这两项操作:
^(\W)*|(\W)*$
         Name
0     Tom hola
1    secondx 
2        nick
3  krish here