当前位置: 首页 > 面试题库 >

Python Pandas:删除字符串中定界符后的所有内容

艾望
2023-03-14
问题内容

我有包含例如的数据帧:

"vendor a::ProductA"
"vendor b::ProductA"
"vendor a::Productb"

我需要删除(包括)两个::的所有内容,以便最终得到:

"vendor a"
"vendor b"
"vendor a"

我尝试了str.trim(似乎不存在)和str.split,但没有成功。最简单的方法是什么?


问题答案:

您可以pandas.Series.str.split像平常一样使用split。只需对string进行拆分'::',并索引从该split方法创建的列表:

>>> df = pd.DataFrame({'text': ["vendor a::ProductA", "vendor b::ProductA", "vendor a::Productb"]})
>>> df
                 text
0  vendor a::ProductA
1  vendor b::ProductA
2  vendor a::Productb
>>> df['text_new'] = df['text'].str.split('::').str[0]
>>> df
                 text  text_new
0  vendor a::ProductA  vendor a
1  vendor b::ProductA  vendor b
2  vendor a::Productb  vendor a

这是一个非熊猫解决方案

>>> df['text_new1'] = [x.split('::')[0] for x in df['text']]
>>> df
                 text  text_new text_new1
0  vendor a::ProductA  vendor a  vendor a
1  vendor b::ProductA  vendor b  vendor b
2  vendor a::Productb  vendor a  vendor a

编辑:这是pandas上面发生的情况的分步说明:

# Select the pandas.Series object you want
>>> df['text']
0    vendor a::ProductA
1    vendor b::ProductA
2    vendor a::Productb
Name: text, dtype: object

# using pandas.Series.str allows us to implement "normal" string methods 
# (like split) on a Series
>>> df['text'].str
<pandas.core.strings.StringMethods object at 0x110af4e48>

# Now we can use the split method to split on our '::' string. You'll see that
# a Series of lists is returned (just like what you'd see outside of pandas)
>>> df['text'].str.split('::')
0    [vendor a, ProductA]
1    [vendor b, ProductA]
2    [vendor a, Productb]
Name: text, dtype: object

# using the pandas.Series.str method, again, we will be able to index through
# the lists returned in the previous step
>>> df['text'].str.split('::').str
<pandas.core.strings.StringMethods object at 0x110b254a8>

# now we can grab the first item in each list above for our desired output
>>> df['text'].str.split('::').str[0]
0    vendor a
1    vendor b
2    vendor a
Name: text, dtype: object

我建议您查看pandas.Series.str文档,或者更好的方法是在pandas中使用文本数据。



 类似资料:
  • 问题内容: 我有一个由三部分组成的字符串。我希望字符串是(更改),单独的部分(不更改)和最后一个更改的部分。我要删除分隔部分和结尾部分。分离的部分是“-”,所以我想知道的是,是否有办法删除字符串中一定部分之后的所有内容。 这种情况的一个示例是,如果我想将其转换为:“ Stack Overflow-一个地方来问问题”:任何帮助表示赞赏! 问题答案: 例如,您可以这样做: 要么 (并添加相关的错误处理

  • 问题内容: 有什么方法可以删除某个角色之后的所有内容,或者只是选择该角色之前的所有内容?我从href到“?”都得到了值,并且总是会有不同数量的字符。 像这样 我只希望href是,所以我想删除“?”之后的所有内容。 我现在正在使用这个: 问题答案: 我还应该提到,本机字符串函数比正则表达式快得多,后者仅应在必要时才使用(这不是其中一种情况)。 更新代码以不添加“?”:

  • 问题内容: 我正在尝试从字符串中删除所有换行符。我已经阅读了有关如何执行此操作的信息,但是由于某种原因,我似乎无法执行此操作。这是我正在逐步执行的操作: 而且我仍然在输出中看到换行符。我也尝试过rstrip,但是我仍然看到换行符。有人能阐明我为什么做错了吗?谢谢。 问题答案: 仅从字符串的开头和结尾删除字符。您要使用:

  • 问题内容: 如何从此示例值获取子字符串: 我希望它返回。因此,基本上,我们需要删除之后的所有信息。 更多示例:1234_abc 问题答案: 您可以使用和: 警告:只有在您的字符串中确实包含下划线的情况下,才能保证此方法有效 更新 此外,如果从Oracle 10g开始运行,则可以采用Regex路径,该路径可以更强大地处理异常。

  • 问题内容: 我需要从字符串中删除所有字符,然后再在字符串中出现此字符: 不知道我该怎么做。 问题答案: 您可以使用strstr做到这一点。

  • 问题内容: 我面临网址问题,我希望能够转换标题,该标题可以包含任何内容,并去除所有特殊字符,因此它们仅包含字母和数字,当然我想用连字符替换空格。 怎么做?我听说过很多关于正则表达式(regex)的使用… 问题答案: 这应该可以满足您的需求: 用法: 将输出: 编辑: 嘿,只是一个简单的问题,如何防止多个连字符彼此相邻?并将它们替换为1?