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 来源: https://codeday.me/bug/20190708/1403899.html