首页 > 解决方案 > 按文件扩展名 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]

编辑我有很多价值观。饼图无法全部显示。 在此处输入图像描述

标签: pythonpandasdataframe

解决方案


您可以使用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())

在此处输入图像描述

更新

要获得sum每个组的大小图表:

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

在此处输入图像描述


推荐阅读