python正则表达式详解 pandas_python-根据正则表达式字典填充Pandas DataFrame列

我有一个如下数据框:

GE GO

1 AD Weiss

2 KI Ruby

3 OH Port

4 ER Rose

5 KI Rose

6 JJ Weiss

7 OH 7UP

8 AD 7UP

9 OP Coke

10 JJ Stout

并且我正在尝试根据GO列的值添加一列.我当时正在考虑使用字典,但是在我的真实情况下,我需要使用正则表达式来识别部分匹配项.例如:

Dic={'Weiss|\wuby|Sto\w+':'Beer', 'Port|Rose':'Wine','\dUP|Coke':'Soda'}

这会给

GE GO OUT

1 AD Weiss Beer

2 KI Ruby Beer

3 OH Port Wine

4 ER Rose Wine

5 KI Rose Wine

6 JJ Weiss Beer

7 OH 7UP Soda

8 AD 7UP Soda

9 OP Coke Soda

10 JJ Stout Beer

lambda函数在这里可以工作吗?我将如何使其成为正则表达式?提前致谢!

解决方法:

您可以这样操作:

In [253]: df['OUT'] = df[['GO']].replace({'GO':Dic}, regex=True)

In [254]: df

Out[254]:

GE GO OUT

1 AD Weiss Beer

2 KI Ruby Beer

3 OH Port Wine

4 ER Rose Wine

5 KI Rose Wine

6 JJ Weiss Beer

7 OH 7UP Soda

8 AD 7UP Soda

9 OP Coke Soda

10 JJ Stout Beer

有趣的观察-在较早的Pandas版本中,与DataFrame.replace()和Series.str.replace()方法相比,Series.map()方法几乎总是更快.在Pandas 0.19.2中变得更好:

In [267]: df = pd.concat([df] * 10**4, ignore_index=True)

In [268]: %timeit df.GO.map(lambda x: next(Dic[k] for k in Dic if re.search(k, x)))

1 loop, best of 3: 1.57 s per loop

In [269]: %timeit df[['GO']].replace({'GO':Dic}, regex=True)

1 loop, best of 3: 895 ms per loop

In [270]: %timeit df.GO.replace(Dic, regex=True)

1 loop, best of 3: 876 ms per loop

In [271]: df.shape

Out[271]: (100000, 2)

标签:python,pandas,dataframe,dictionary

来源: https://codeday.me/bug/20191011/1889858.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值