python - 按文件扩展名 pandas 对值进行分组
问题描述
我有一个包含多种文件(.svg、.png、csv 等)的数据框。还有一些文件没有扩展名。
如何在没有扩展名的情况下对这些文件进行分组并制作像这样的饼图?
import pandas as pd
df = pd.DataFrame({'file_name': ['filelist.xml', 'sheet002', 'sheet005.htm', 'image1.jpg', 'image3.jpg',
'kings.xls', 'Kings.png', 'Kings', 'Riders', 'Royals.pdf', 'Royals.csv', 'Riders.xml'],
'created_at': ['2020-01-01 23:00:34'] *2 + ['2018-01-01 13:01:34'] *3 + ['2020-01-01 22:00:00'] *4 + ['2018-02-01 23:00:34']*3,
'size':[8760] * 3 + [789] *4 + [863] *2 + [673] *3})
df_unknown=df[df['file_name'].apply(lambda x: len(x.rsplit('.', 1))) < 2]
解决方案
您可以使用where
将那些不包含 a 的值设置.
为未知,并从 中绘制饼图value_counts
:
(df.file_name.where(df.file_name.str.contains(r'\.'), 'unknown')
.str.split('.').str[-1]
.value_counts()
.plot.pie())
或者另一种方法是使用str.extract
and fillna
:
(df.file_name.str.extract(r'(\.\w+$)', expand=False)
.fillna('unknown')
.value_counts()
.plot.pie())
更新
要获得sum
每个组的大小图表:
(df['size'].groupby(df.file_name.str.extract(r'(\.\w+$)', expand=False)
.fillna('unknown'))
.sum().plot.pie())
推荐阅读
- unity3d - Unity 中如何计算变换的说明
- java - 如何使用 MySQL 请求生成实体类?
- java - 等待线程完成 .join 不一致
- prometheus - 如何可视化所有请求的平均响应时间
- java - 如何在 MainActivity 之外的另一个类中调用 findViewById(R.id.textView)?
- amazon-web-services - 无法从锁定的 S3 冰川保险库中删除文件
- python - Python - BeautifulSoup - 无法提取跨度值
- javascript - “TypeError 无法读取未定义的属性”第一次以角度提交表单
- java - 为什么 pageContext.request.contextPath 被视为字符串而不是类路径?
- java - 我怎样才能只从 textClock 获得小时