去除熊猫列中特定字符左侧的字符

时间:2021-05-06 08:54:54

标签: python-3.x regex pandas

我有以下数据:

key German
0   0:- Profile 1
1   1:- Archetype   Realist*in
2   2:- RIASEC Code:    R- Realistic
3   3:- Subline Deine Stärke? Du bleibst dir selber treu.
4   4:- Copy    Dein Erfolg basiert auf deiner praktischen Ver...

在“Key”列中,我想删除后面的数字和冒号破折号。此顺序始终相同(从左侧开始)。因此,对于第一行,我想删除“0:-”,而只保留“配置文件 1”。我正在努力寻找正确的正则表达式来做我想做的事。最初我尝试了以下操作:

df_json['key'] = df_json['key'].map(lambda x: x.strip(':- ')[1])

然而,这种方法限制太多,因为字段中可能有多个词。

我想使用 pd.Series.str.replace(),但我无法找出正确的正则表达式来实现所需的结果。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

使用您显示的示例,请尝试以下操作。在这里使用 Pandas 的 replace 函数。简单的解释是,将 Pandas 的 replace 函数应用于数据框的 German 列,然后使用正则表达式 ^[0-9]+:-\s+ 将值替换为 NULL。

df['German'].replace('(^[0-9]+:-\s+)','', regex=True)

解释:

  • ^[0-9]+:匹配起始数字后跟冒号。
  • :-\s+:匹配冒号,后跟 -,后跟 1 个或多个空格。

答案 1 :(得分:3)

仅使用 pandas.Series.str.partition 而不是正则表达式怎么样:

df['German'] = df['German'].str.partition()[2]

这将仅在第一个空间拆分系列并获取尾随部分。作为分区的替代方案,您也可以拆分:

df['German'] = df['German'].str.split(' ', 1).str[1]

如果您必须使用正则表达式,可以使用惰性量词来匹配第一个空格字符:

df['German'] = df['German'].replace('^.*? +','', regex=True)

地点:

  • ^ - 起点线锚点。
  • .*? - 除换行符之外的任何 0+(懒惰)字符;
  • + - 1+ 个文字空格字符。

这是一个在线demo

答案 2 :(得分:2)

你需要

df_json['key'] = df_json['key'].str.replace(r'^\d+:-\s*', '', regex=True)

参见 regex demoregex graph

enter image description here

详情

  • ^ - 字符串的开始
  • \d+ - 一位或多位数字
  • : - 一个冒号
  • - - 连字符
  • \s* - 零个或多个空格

答案 3 :(得分:2)

提取紧邻不需要的字符左侧的任何非空格 \S 和非数字 \D

df['GermanFiltered']=df['German'].str.extract("((?<=^\d\:\-\s)\S+\D+)")
相关问题