如何在突变 dplython 中使用正则表达式来添加新列



熟悉R和dplyr后,我试图使用dplythonpandas在python中完成我的一项任务。

正在尝试在数据框中创建一个新列,该列使用正则表达式评估列,并且在模式匹配时,我给出值 = 1 否则 0。

import dplython as dp 
import pandas as pd 
import re
a = {'module_name':'eventOutput','module_tpye':'export'}
b = {'module_name':'session','module_tpye':'export'}
df = pd.DataFrame()
master_data = (a,b)
new_df = df.from_dict(master_data)
dp_new_df = dp.DplyFrame(new_df)
dp_new_df = dp_new_df >> dp.mutate(
  to_select=(
    1 
    if bool(re.match(r"(.*)Output(.*)",dp.X.module_name)) 
    else 0
  )
)

TypeError: expected string or bytes-like object时出现错误

预期输出:

module_name  module_tpye    to_select
0  eventOutput      export          1
1      session      export          0

致谢 :对蟒蛇寄予厚望的家伙

这是一个不使用 dplython 的解决方案,我不熟悉

import pandas as pd
import re
a={'module_name':'eventOutput','module_tpye':'export'}
b={'module_name':'session','module_tpye':'export'}
df = pd.DataFrame()
master_data = (a,b)
new_df = df.from_dict(master_data)
new_df["to_select"] = [bool(re.match(r"(.*)Output(.*)",x)) for x in new_df["module_name"]]

我写了一个datardplyr和家庭移植到python的包。现在,您可以使用(几乎(与在 R 中相同的语法来执行此操作:

>>> from datar.all import f, tibble, mutate, if_else, grepl
>>> df = tibble(
...     module_name=['eventOutput', 'session'], 
...     module_type=['export']
... )
>>> df
   module_name module_type
      <object>    <object>
0  eventOutput      export
1      session      export
>>> 
>>> df >> mutate(
...     to_select=if_else(grepl("Output", f.module_name), 1, 0)
... )
   module_name module_type  to_select
      <object>    <object>    <int64>
0  eventOutput      export          1
1      session      export          0

最新更新