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

Python 按文件扩展名对值进行分组,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含多种类型文件(.svg、.png、csv等)的数据框架。还有一些文件没有扩展名 我如何在没有扩展名的情况下对这些文件进行分组,并制作这样的饼图 将熊猫作为pd导入 df=pd.DataFrame({'file_name':['filelist.xml','sheet002','sheet005.htm','image1.jpg','image3.jpg', 'kings.xls','kings.png','kings','Riders','Royals.pdf','Royals.c

我有一个包含多种类型文件(.svg、.png、csv等)的数据框架。还有一些文件没有扩展名

我如何在没有扩展名的情况下对这些文件进行分组,并制作这样的饼图

将熊猫作为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'],
“创建时间:['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,
“大小”:[8760]*3+[789]*4+[863]*2+[673]*3})
df_unknown=df[df['file_name'].apply(lambda x:len(x.rsplit('.',1))<2]
编辑 我有很多价值观。饼图不能全部显示它们。

您可以使用将不包含
的值设置为未知,并从以下位置绘制饼图:

或者另一种方法是使用和:

更新

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

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

您可以使用将不包含
的值设置为未知,并从以下位置绘制饼图:

或者另一种方法是使用和:

更新

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

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

试试:

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

_.plot.pie()
plt.show()
尝试:

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

_.plot.pie()
plt.show()

如果我想使用大小?我使用的是:
df.groupby('extension')['size'].sum().plot.pie(y='size',figsize=(7,7))
@Aizzaac啊,我知道你想使用大小列。是的。“大小”列。但是我有太多的值,饼图不能正确显示它们。你知道如何解决这个问题吗?@Aizzaac取前5-10个最常见的值,并将所有其他值标记为“其他”,如果我想使用大小?我使用的是:
df.groupby('extension')['size'].sum().plot.pie(y='size',figsize=(7,7))
@Aizzaac啊,我知道你想使用大小列。是的。“大小”列。但是我有太多的值,饼图不能正确显示它们。你知道如何解决这个问题吗?@Aizzaac取前5-10个最常见的值,并将所有其他值标记为“其他”如何使用文件的大小而不是计数?我使用的是:
df.groupby('extension')['size'].sum().plot.pie(y='size',figsize=(7,7))
它提取扩展名。自己检查:)运行:
df.file\u name.str.extract(r'(\.\w+$),expand=False)
@AizzaacHow我可以用文件的大小而不是计数来做吗?我使用的是:
df.groupby('extension')['size'].sum().plot.pie(y='size',figsize=(7,7))
它提取扩展名。自己检查:)运行:
df.file\u name.str.extract(r'(\.\w+$),expand=False)
@Aizzaac
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()