加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:44:11 所属栏目:Python 来源:网络整理
导读:首先,我是大熊猫的新手,我正在努力倾斜如此彻底的答案将不胜感激. 我想生成一个表示map witter标签suboken的pandas DataFrame – 标签suboken意味着集合{hashtagA} U {i |我在分组(‘_’,hashtagA)}中从表匹配海报 – 鸣叫 例如: In [1]: df = pd.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","Yo #rofl_so_funny"]])

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

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

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

df = pd.DataFrame([["jim","Yo #rofl_so_funny"]],columns=['user','tweet'])

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读