python外连接_python – pandas – 使用外连接的DataFrame扩展

首先,我是大熊猫的新手,我正在努力倾斜如此彻底的答案将不胜感激.

我想生成一个表示map witter标签suboken的pandas DataFrame – >标签suboken意味着集合{hashtagA} U {i |我在分组(‘_’,hashtagA)}中从表匹配海报 – >鸣叫

例如:

In [1]: df = pd.DataFrame([["jim", "i was like #yolo_omg to her"], ["jack", "You are so #yes_omg #best_place_ever"], ["neil", "Yo #rofl_so_funny"]])

In [2]: df

Out[2]:

0 1

0 jim i was like #yolo_omg to her

1 jack You are so #yes_omg #best_place_ever

2 neil Yo #rofl_so_funny

从那以后我想得到类似的东西

0 1

0 jim yolo_omg

1 jim yolo

2 jim omg

3 jack yes_omg

4 jack yes

5 jack omg

6 jack best_place_ever

7 jack best

8 jack place

9 jack ever

10 neil rofl_so_funny

11 neil rofl

12 neil so

13 neil funny

我设法构建了这种实际上完成工作的琐事:

In [143]: df[1].str.findall('#([^\s]+)') \

.apply(pd.Series).stack() \

.apply(lambda s: [s] + s.split('_') if '_' in s else [s]) \

.apply(pd.Series).stack().to_frame().reset_index(level=0) \

.join(df, on='level_0', how='right', lsuffix='_l')[['0','0_l']]

Out[143]:

0 0_l

0 0 jim yolo_omg

1 jim yolo

2 jim omg

0 jack yes_omg

1 jack yes

2 jack omg

1 0 jack best_place_ever

1 jack best

2 jack place

3 jack ever

0 0 neil rofl_so_funny

1 neil rofl

2 neil so

3 neil funny

但我有一种非常强烈的感觉,即有更好的方法可以做到这一点,特别是考虑到真正的数据集是巨大的.

解决方法:

大熊猫确实具有本地做这个功能.

Series.str.findall()

这基本上适用于正则表达式并捕获您在其中指定的组.

所以如果我有你的数据帧:

df = pd.DataFrame([["jim", "i was like #yolo_omg to her"], ["jack", "You are so #yes_omg #best_place_ever"], ["neil", "Yo #rofl_so_funny"]])

我要做的是首先设置列的名称,如下所示:

df.columns = ['user', 'tweet']

或者在创建数据帧时执行此操作:

df = pd.DataFrame([["jim", "i was like #yolo_omg to her"], ["jack", "You are so #yes_omg #best_place_ever"], ["neil", "Yo #rofl_so_funny"]], columns=['user', 'tweet'])

然后我会简单地使用正则表达式应用提取函数:

df['tag'] = df["tweet"].str.findall("(#[^ ]*)")

我会使用负面角色群而不是积极角色群,这更有可能在特殊情况下存活下来.

标签:python,pandas,outer-join

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值