使用Python/Pandas处理重复ID行:提取Avail值并去重
Python处理CSV:检测首个ID重复、提取Avail值并去重
我来帮你搞定这个CSV处理的需求,下面分两种实现方法,你可以根据自己的场景选择:
方法一:用Pandas(高效简洁,适合大多数场景)
Pandas处理表格数据简直是神器,代码量少还不容易出错,步骤如下:
- 先安装pandas(如果还没装的话,终端里跑
pip install pandas) - 读取CSV文件,获取首个ID
- 检查该ID是否重复,提取对应的Avail值
- 删除重复ID行,保留每个ID的首次出现
- 保存处理后的文件
对应的代码:
import pandas as pd # 替换成你的CSV文件路径 df = pd.read_csv('your_input.csv') # 获取第一行的Id值 first_id = df['Id'].iloc[0] # 检查这个Id是否存在重复(至少出现2次) if (df['Id'] == first_id).sum() > 1: # 提取所有该Id对应的Avail值,转成列表方便查看 first_id_avails = df[df['Id'] == first_id]['Avail'].tolist() print(f"首个ID {first_id} 存在重复,对应的Avail值为: {first_id_avails}") else: print(f"首个ID {first_id} 没有重复") # 去重:保留每个Id第一次出现的行,删除后续重复行 df_cleaned = df.drop_duplicates(subset='Id', keep='first') # 保存处理后的CSV,index=False是为了不把pandas的索引列写进去 df_cleaned.to_csv('your_output.csv', index=False)
方法二:原生CSV模块(无需第三方库,适合环境受限情况)
如果你的环境不能装第三方库,用Python自带的csv模块也能实现,步骤类似:
- 读取CSV所有行到列表
- 提取首个ID,遍历收集对应的Avail值
- 用集合记录已出现的ID,只保留首次出现的行
- 写入处理后的文件
代码示例:
import csv # 读取原始CSV input_file = 'your_input.csv' output_file = 'your_output.csv' rows = [] with open(input_file, 'r', newline='', encoding='utf-8') as infile: reader = csv.DictReader(infile) fieldnames = reader.fieldnames # 保存表头,后面写入要用 for row in reader: rows.append(row) if not rows: print("警告:CSV文件是空的!") else: first_id = rows[0]['Id'] first_id_avails = [] seen_ids = set() cleaned_rows = [] for row in rows: current_id = row['Id'] # 收集首个ID的Avail值 if current_id == first_id: first_id_avails.append(row['Avail']) # 只保留首次出现的ID行 if current_id not in seen_ids: seen_ids.add(current_id) cleaned_rows.append(row) # 输出结果提示 if len(first_id_avails) > 1: print(f"首个ID {first_id} 存在重复,对应的Avail值有: {first_id_avails}") else: print(f"首个ID {first_id} 没有重复") # 写入处理后的CSV with open(output_file, 'w', newline='', encoding='utf-8') as outfile: writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(cleaned_rows)
注意事项
- 替换代码里的
your_input.csv和your_output.csv为你实际的文件路径 - 如果你的CSV分隔符不是逗号,可以在
read_csv(pandas)里加sep=';'这类参数,或者在csv模块的DictReader里加delimiter=';' - 编码问题:如果CSV有乱码,试试把
encoding='utf-8'改成encoding='gbk'或者其他编码
内容的提问来源于stack exchange,提问作者Brock Winfrey
相关产品推荐
相关产品推荐

