为了账号安全,请及时绑定邮箱和手机立即绑定

按文件扩展名 pandas 对值进行分组

按文件扩展名 pandas 对值进行分组

MYYA 2023-01-04 11:19:00
我有一个包含多种文件类型(.svg、.png、csv 等)的数据框。还有一些文件没有扩展名。如何在没有扩展名的情况下对这些文件进行分组并制作这样的饼图?import pandas as pddf = 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]编辑我有很多价值观。饼图无法显示全部。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

您可以使用where将不包含 a 的那些值设置.为未知,并从中绘制饼图value_counts

(df.file_name.where(df.file_name.str.contains(r'\.'), 'unknown')
             .str.split('.').str[-1]
             .value_counts()
             .plot.pie())

或者另一种方法是使用str.extractand fillna

(df.file_name.str.extract(r'(\.\w+$)', expand=False)
                 .fillna('unknown')
                 .value_counts()
                 .plot.pie())

//img1.sycdn.imooc.com//63b4f061000122d105700552.jpg

更新

要获得sum每组的尺寸图表:

(df['size'].groupby(df.file_name.str.extract(r'(\.\w+$)', expand=False)
                    .fillna('unknown'))
            .sum().plot.pie())

//img1.sycdn.imooc.com//63b4f06f00015de405700556.jpg

查看完整回答
反对 回复 2023-01-04
?
翻阅古今

TA贡献1780条经验 获得超5个赞

尝试:os.path.splitext_GroupBy.sum

import os

(df['size'].groupby(df['file_name'].map(os.path.splitext)

                                   .str[-1]

                                   .replace({'': 'unknown'}))

           .sum())


file_name

.csv         673

.htm        8760

.jpg        1578

.pdf         673

.png         789

.xls         789

.xml        9433

unknown    10486

Name: size, dtype: int64

从这里开始,绘图应该很简单:


_.plot.pie()

plt.show()


查看完整回答
反对 回复 2023-01-04
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信