使用Pandas合并CSV中汽车模型重复行的技术求助
解决Pandas合并同车型CSV行的问题
嗨,我懂你现在的困扰啦——你有两行同车型的数据,想要合并成一行,把对应列里的有效数值(也就是非零的那个)保留下来对吧?之前用Pandas的groupby没成功,大概率是细节没处理好,我给你一步步搞定:
第一步:读取CSV文件(处理分隔符空格)
你的CSV用|分隔,但每个|前后还有空格,直接用sep='|'会导致列里带空格,groupby的时候会把看似相同的车型当成不同项。所以读取时要处理这个问题:
import pandas as pd # 读取CSV,处理|前后的任意空格,同时指定无表头 df = pd.read_csv('你的文件名.csv', sep='\s*\|\s*', header=None, engine='python') # 给列命名方便后续操作(你也可以根据实际需求修改列名) df.columns = ['车辆ID', '车型名称', '参数3', '参数4', '参数5', '参数6', '参数7', '参数8']
第二步:分组并聚合(取每列最大值)
看你的需求,合并后要保留每列的非零值,这刚好可以用max()聚合函数——因为0和9的最大值是9,35和0的最大值是35,完全符合你的预期:
# 按车型名称分组,同时保留其他列的最大值,as_index=False避免把车型变成索引 merged_df = df.groupby('车型名称', as_index=False).max()
第三步:输出结果
现在你可以打印结果或者保存回CSV:
# 打印合并后的结果,用|分隔 print(merged_df.to_csv(sep='|', index=False)) # 保存到新的CSV文件 merged_df.to_csv('合并后的文件.csv', sep='|', index=False)
为什么之前可能失败?
- 没处理
|前后的空格:导致车型名称列带多余空格,groupby无法识别为同一组 - 用错了聚合函数:比如用
sum()虽然也能得到类似结果,但max()更贴合你“保留有效非零值”的需求 - 没设置
as_index=False:分组后车型会变成索引,输出格式不符合你的预期
执行完上面的代码,就能得到你想要的结果:
101|land rover 90 2.5 td 4X4|148|1|0.68|0.0068|9|35
内容的提问来源于stack exchange,提问作者Lookszz
相关产品推荐
相关产品推荐

