繁体   English   中英

如果值包含特定子字符串,如何从列值中删除单词?

[英]How to strip words from a column value if the value contains specific substrings?

我有这样的行值:

         ID     MyColumn      
0        A      "Best Position 3 5"
1        B      "Healthy (unexpired)
2        C      "At-Large"
3        D      "Run 2 Position 1"
4        E      "Hello"
4        E      "None"
4        E      "Tomorrow"

我想扫描此表以查找包含子字符串“Position”的任何行,然后对于这些行仅保留 int 的第一个实例。 我有 Lambda / regex 用于在值中获取 int 的第一个实例:

...str.replace(r'\D+', '').str.split()

但我不确定如何在 substring 出现的情况下应用它。

结果集:

         ID     MyColumn      
0        A      "3"
1        B      "Healthy (unexpired)
2        C      "At-Large"
3        D      "2"
4        E      "Hello"
4        E      "None"
4        E      "Tomorrow"

我们也许可以在这里使用带有智能正则表达式的str.replace

regex = '.*?(\d+).*(?:Position|unexpired).*|.*?(?:Position|unexpired).*?(\d+).*'
df['new'] = df.loc['MyColumn'].str.replace(regex, '\1\2', case=False)

Series.str.containsSeries.str.extract用于第一个 integer 与Series.mask并最后由Series.fillna替换为原始不匹配值:

mask= df['MyColumn'].str.contains('Position|unexpired', case=False)
df['MyColumn']=(df['MyColumn'].mask(mask,df['MyColumn'].str.extract(r'(\d+)',expand=False))
                              .fillna(df['MyColumn']))
print (df)
  ID              MyColumn
0  A                     3
1  B  "Healthy (unexpired)
2  C            "At-Large"
3  D                     2
4  E               "Hello"
4  E                "None"
4  E            "Tomorrow"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM