Python中按sha1合并DataFrame的方法及报错修复
问题修复方案
报错原因
你直接将列名列表传给aggregate的用法错误。aggregate(或简写agg)需要接收聚合函数映射(字典形式,键为列名,值为对应聚合函数),而非列名列表。当你传入列名列表时,pandas会把每个列名当作函数名去查找,自然找不到Location这类方法,从而抛出AttributeError。
修复代码
根据合并需求,我们需要为不同列指定合适的聚合规则:比如同一sha1下唯一的列(如repository、url)用first取唯一值,其他可能存在多值的列用list合并所有值。示例代码如下:
# 定义各列的聚合规则 agg_rules = { 'Location': list, 'filePath': list, 'startLine': list, 'endLine': list, 'startColumn': list, 'endColumn': list, 'codeElementType': list, 'description': list, 'codeElement': list, 'repository': 'first', # 假设同一sha1对应唯一仓库 'sha1': 'first', # 分组键保留唯一值即可 'url': 'first', # 假设同一sha1对应唯一链接 'type': list, 'description.1': list } # 按sha1分组并应用聚合规则,as_index=False让sha1作为普通列保留 df_new = df.groupby('sha1', as_index=False).agg(agg_rules) print(df_new)
可选调整
- 如果某些列在同一
sha1下确实唯一,也可以用last、unique替代first,效果一致 - 若需要去重后的列表,可自定义聚合函数:
lambda x: list(pd.unique(x))(相比set能保留原有顺序)
内容的提问来源于stack exchange,提问作者Giammaria GIORDANO
相关产品推荐
相关产品推荐

