【Pandas】常用文本处理套路

  • 用Pyecharts作图,一般要生成一个或者多个list()。对于不同的文本给出方式,需要采用不同的方法。下面就几种常见情况做一下总结
import pandas as pd
from collections import Counter
import re

from pyecharts.charts import Pie
from pyecharts import options as opts
1.数据区间
df_1 = pd.read_excel('D:\临时\【♥看板类型】Pyecharts绘制B站各个分区Top50\B站新榜_总粉丝数榜单.xlsx', usecols='P')
df_1.head()
作品数
021
11179
2225
3465
4246
方法一, 自定义函数
  • 划分区间
def cut_work(x):
    if x <= 100:
        return '0~100'
    elif x <= 200:
        return '100~200'
    elif x <= 300:
        return '200~300'
    elif x <= 400:
        return '300~400'
    elif x <= 500:
        return '400~500'
    else:
        return '>500'
  • 重组为数据区间
df_1['work_cut'] = df_1['作品数'].apply(lambda x: cut_work(x))
df_w = df_1['work_cut'].value_counts()
# 排一下序
#df_w = df_t.sort_values(ascending=False)
df_w
0~100      263
100~200    245
>500       216
200~300    169
300~400    102
400~500     60
Name: work_cut, dtype: int64
方法二 cut() 函数
bins = [0,100,200,300,400,500,20000]
df_1['cuts'] = pd.cut(df_1['作品数'], bins=bins)
df_works = df_1.groupby('cuts').count()
  • 随手图
df_w_paris = [list(z) for z in zip(df_w.index.tolist(), df_w.values.tolist())]

p_1 = (
    Pie()
    .add(
        '',
        df_w_paris,
    )
)
p_1.render_notebook()

在这里插入图片描述

2.各行相同位置单元格有多个关键词文本,存在重复,要求统计各个关键词出现次数,即得到两个list,一个是关键词,另一个是和关键词顺序对应的计数
  • 正则提取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8Mw46gP-1659326710234)(D:\临时\广告分析\广告位.jpg)]

df_2 = pd.read_excel('D:\临时\广告分析\ADX广告投放数据.xlsx', usecols='L').dropna()
df_2.head()
广告位
0穿山甲联盟:93.81%, 快手:3.00%, 今日头条:0.84%, 天天快报:0.69%...
1穿山甲联盟:14.55%, 腾讯视频:12.66%, 腾讯新闻:9.24%, 天天快报:8....
2穿山甲联盟:50.52%, 今日头条:6.51%, 腾讯视频:6.30%, 天天快报:6.2...
3穿山甲联盟:50.54%, 今日头条:12.89%, 西瓜视频:11.62%, 抖音:11....
4穿山甲联盟:22.13%, 手机百度:18.88%, 好看视频:15.74%, 今日头条:1...
# 先转成 list 即使只有一列, 也要用列索引指定列, 否则生成的是一个由各列值的 list 构成的 list
ads = df_2['广告位'].values.tolist()
# 组合成字符串
ads_str = ''.join(ads)
# 正则提取文本
ads_list = re.findall('\,\s*(.*?)\:', ads_str)
# 对ads_list计数
ads_c =Counter(ads_list)
  • 至此到得了 字段:出现次数 类似字典的Counter对象, 下面按出现次数排序
# 这个正则有一点小问题, 没有仔细研究
ads_sorted = sorted(ads_c.items(), key=lambda x: x[1], reverse=True)
  • 前20位 做图用的list`
ads_names = [b[0] for b in ads_sorted][:20]
ads_values = [b[1] for b in ads_sorted][:20]
  • 顺手做个饼图
p_2 =(
    Pie()
    .add(
        "",
        [list(z) for z in zip(ads_names, ads_values)],
        radius=['25%','60%'],
        center=['50%','60%'],))  

p_2.render_notebook()

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值