如何统计Pandas数据框文件名列中的唯一文件扩展名数量?
获取DataFrame文件列的唯一扩展名数量
你的需求是从包含大量带扩展名文件名的DataFrame列中,统计唯一文件扩展名的数量,当前尝试的代码逻辑有误,下面是修正后的实现方法:
问题分析
你写的代码df[['filename']].loc[df['filename'].str.split().str.most_common(100)]存在两个核心问题:
- 默认
str.split()按空格分割文件名,而扩展名是通过.分隔的,分割符错误 str.most_common()是Counter类的方法,不能直接在Series的str属性上调用,调用逻辑不成立
正确实现方法
方法1:直接统计唯一数量
通过分割文件名提取最后一部分作为扩展名,再用nunique()统计唯一值数量:
# 提取每个文件名的扩展名(处理含多个点的情况,如file.tar.gz取gz) extensions = df['filename'].str.split('.').str[-1] # 计算唯一扩展名的数量 unique_extension_count = extensions.nunique() print(unique_extension_count)
方法2:同时查看扩展名分布与数量
如果需要同时知道每个扩展名的出现次数,再统计唯一数量:
# 统计每个扩展名的出现次数 extension_counts = df['filename'].str.split('.').str[-1].value_counts() # 唯一扩展名数量即为结果的长度 unique_ext_count = len(extension_counts) # 打印详细分布和数量 print("各扩展名出现次数:") print(extension_counts) print(f"\n唯一扩展名数量:{unique_ext_count}")
处理特殊情况
如果存在无扩展名的文件(如readme)或隐藏文件(如.gitignore),可以过滤掉这类情况:
# 仅保留有明确扩展名的文件(分割后元素数>1),并提取扩展名 valid_extensions = df['filename'].str.split('.').apply( lambda x: x[-1] if len(x) > 1 else None ).dropna() # 统计唯一数量 unique_valid_count = valid_extensions.nunique() print(unique_valid_count)
内容的提问来源于stack exchange,提问作者HAAAAN
相关产品推荐
相关产品推荐

