Python技术问题:无法通过apply函数根据文件列数据生成新列
解决Pandas apply调用错误及文件扩展名提取问题
原始数据
ID File 1 this_file_whatever.ext1 2 this_whatever.ext2 3 this_is_ok_pooh.ext3
问题代码中的错误点
- apply函数调用方式错误:原代码
DF.apply(create_filegroups(row), axis=1)直接给函数传了row参数,这是错误的。apply会自动将DataFrame的每一行数据传入函数,只需传入函数名即可,不需要加括号和参数。 - 列名不匹配:数据中的列名为
File,但函数里用了row['Name'],导致无法找到对应列,触发KeyError。 - 未处理边界情况:如果文件名中没有
.,test变量未定义就执行return,会引发NameError。
修正后的代码
def create_filegroups(row): # 调整字典结构:用扩展名作为键,分组名作为值,方便直接映射 filegroup_dict = { 'ext1': 'GroupA', 'ext2': 'GroupB', 'ext3': 'GroupC' } # 匹配数据中的列名File filename = row['File'] if '.' in filename: # 提取扩展名 ext = filename.split(".", 1)[1] # 用get方法处理未匹配到的扩展名,返回默认值Unknown return filegroup_dict.get(ext, 'Unknown') # 处理无扩展名的文件 return 'Unknown' DF = build_df() # 正确调用apply:只传入函数名 DF['COL3'] = DF.apply(create_filegroups, axis=1) print(DF)
修正后效果
运行后会生成包含COL3列的DataFrame,其中值为对应扩展名的分组名,无扩展名或未匹配的扩展名会显示Unknown。
内容的提问来源于stack exchange,提问作者uncrayon
相关产品推荐
相关产品推荐

