我正在尝试在熊猫df中正则表达式输出一个字符串。 假设我有这样的df:
a b
0 foo foo AA123 bar 4
1 foo foo BB245 bar 5
2 foo CA234 bar bar 5
我怎么得到这个df:
a b
0 AA123 4
1 BB245 5
2 CA234 5
我尝试过的一种方法是df.replace({'(\w{3}\d{3})': ?})
,但不确定第二个参数应输入什么。
答案 0 :(得分:2)
您可以使用基于正则表达式的Series.str.extract函数仅保留匹配的组。您还需要修复正则表达式-\w
元素的基数应为2。最后,代码为:
df["a"] = df["a"].str.extract('(\w{2}\d{3})', expand=False)
expand=False
表示您不希望str.extract
返回一个DataFrame
,默认情况下会这样做,以容纳多个正则表达式组(每个组返回一列)。由于您已经知道这里只有一个正则表达式组,因此为方便起见,您指定expand=False
来取回Series
,您可以立即将其分配给df["a"]
。如果有多个正则表达式组,则无论您为DataFrame
指定什么,该函数都将返回一个expand
,并且您将对其索引以获取所需的列/组。