如何在Pandas的unique()方法中传入变量作为列名
问题解决说明
错误原因
报错是因为Pandas的DataFrame点属性访问方式不会解析变量值,你写master_data.splitName的时候,Pandas会直接查找名为splitName的列,而不会读取splitName变量存储的ProductCategoryName列名,所以才会报属性不存在的错误。
修复方案
完全可以用unique()实现需求,只需要把列访问方式换成方括号语法即可,方括号内可以传入变量作为列名。
修正后的核心代码
import pandas as pd fn = 'PriceStats.xlsx' # 待拆分的文件名 splitName = 'ProductCategoryName' # 存储列名的变量 master_data = pd.read_excel(fn) # 用方括号访问列,支持传入变量,再调用unique()获取唯一值 cert_types = master_data[splitName].unique()
完整拆分到不同工作表的代码
你可以用以下代码直接实现按唯一值拆分到同一个Excel不同工作表的需求:
import pandas as pd def split_excel_by_column(input_file: str, split_col: str, output_file: str = "split_result.xlsx"): # 读取原始Excel df = pd.read_excel(input_file) # 获取拆分列的唯一值 unique_vals = df[split_col].unique() # 写入到不同工作表 with pd.ExcelWriter(output_file) as writer: for val in unique_vals: # 筛选对应值的行 split_df = df[df[split_col] == val] # 工作表名称不能有特殊字符且最多31个字符,可按需调整命名规则 sheet_name = str(val)[:30] split_df.to_excel(writer, sheet_name=sheet_name, index=False) # 调用示例 split_excel_by_column( input_file = 'PriceStats.xlsx', split_col = 'ProductCategoryName' )
额外说明
- 方括号
df[列名变量]是Pandas推荐的动态列访问方式,点属性访问仅适合列名固定、且不含特殊字符/空格的场景使用 - 如果拆分后的工作表名称有特殊字符(如
/、\、?等),可以在写入前做字符替换避免报错
内容的提问来源于stack exchange,提问作者MPJ567
相关产品推荐
相关产品推荐

