【问题标题】:regex on pandas dataframe column having string representation of lists具有列表字符串表示的熊猫数据框列上的正则表达式
【发布时间】:2020-01-08 12:47:36
【问题描述】:

示例数据框:

>>> df
                                                  color
0  ['Light_Blue','Green','Dark_Blue']
1  ['Sky_Blue','Black','White', 'Yellow','Gray']
2  ['White','Jet_Blue','Pink', 'Tan','Brown', 'Purple']

尝试使用正则表达式:

使用以下,它保留了我期待克服的空值。

>>> df['color'].str.replace(r'\w+_Blue\b', '')
0    ['','Green','']
1    ['','Black','White', 'Yellow','Gray']
2    ['White','','Pink', 'Tan','Brown', 'Purple']
Name: color, dtype: object

期望:

                            color
                          [Green]
     [Black, White, Yellow, Gray]
[White, Pink, Tan, Brown, Purple]

我的问题是我们如何使用regex 方法实现这一目标。

注意:这个帖子有一个答案,使用链接here的其他方法。

【问题讨论】:

  • str 适用于字符串,不适用于一系列列表
  • 这不是stackoverflow.com/questions/57511904/…的骗子吗?您不应该寻找其他技巧来做到这一点,这是正确的方法
  • 你应该链接最后一个帖子,这样你就不会得到重复的答案。无论哪种方式,我和 yatu 提供的是更好的方法,我不会费心寻找使用正则表达式的技巧
  • 文给了你一个使用正则表达式的解决方案,那个有什么问题?
  • 文的解决方案只适用于pandas 0.25版本不兼容0.22。

标签: python regex python-3.x pandas numpy


【解决方案1】:

我建议您对此类问题使用列表推导:

df['color'] = [[i for i in r if not i.endswith(tuple(['_Blue', '_']))] 
               for r in df.color]

                color
0                            [Green]
1       [Black, White, Yellow, Gray]
2  [White, Pink, Tan, Brown, Purple]

【讨论】:

  • 这是我在帖子中提到的选项,但对您的解决方案有好处.. :-) +1
  • 谢谢@KarnKumar :)
  • You're going to need ast.literal_eval 因为这些是列表的字符串表示形式。
  • 尽管在这个问题的输入 @user3483203 中,它们是字符串列表
  • "我在下面有一个 dataFrame 示例,它的列颜色包含列表的字符串表示"
猜你喜欢
  • 2016-12-31
  • 2021-08-09
  • 2021-09-26
  • 2021-03-13
  • 1970-01-01
  • 2020-06-09
  • 2022-01-10
  • 2020-10-23
  • 2018-09-24
相关资源
最近更新 更多