列表转Pandas DataFrame后,如何高效删除指定记录及去重?
Pandas中删除指定记录与去重的正确方法
一、基于字段条件删除记录
Pandas不推荐用for循环遍历处理,直接用布尔索引或drop()方法是更高效规范的方式:
- 布尔索引过滤(推荐,代码更直观)
直接保留符合条件的记录,自动剔除不符合的:
# 示例:删除"age"字段大于30的记录 df = df[df['age'] <= 30] # 多条件过滤(注意用&表示且,|表示或,条件需加括号) df = df[(df['age'] <= 30) & (df['city'] == 'Shanghai')]
- 使用
drop()方法删除指定索引
先筛选出要删除记录的索引,再批量删除:
# 示例:删除"status"字段为"invalid"的记录 df.drop(df[df['status'] == 'invalid'].index, inplace=True)
注:inplace=True表示直接在原DataFrame上修改,不加则返回新的DataFrame
二、去重操作
直接用drop_duplicates()方法,支持按指定字段去重,灵活控制保留规则:
# 按"id"字段去重,保留第一条重复记录 df = df.drop_duplicates(subset=['id'], keep='first') # 按"id"字段去重,保留最后一条重复记录 df = df.drop_duplicates(subset=['id'], keep='last') # 删除所有重复记录(只要重复就全删) df = df.drop_duplicates(subset=['id'], keep=False) # 不指定subset则按所有字段去重 df = df.drop_duplicates()
三、替代append的正确拼接方式
DF.append()已弃用,用pd.concat()时必须保证待拼接的是同结构的DataFrame,否则会出现格式混乱:
# 单条记录拼接:先将记录转为DataFrame再拼接 new_row = pd.DataFrame([{'id': 1001, 'name': 'Bob', 'age': 25}]) df = pd.concat([df, new_row], ignore_index=True)
注:ignore_index=True会重置拼接后的索引,避免索引重复问题
内容的提问来源于stack exchange,提问作者Rupert
相关产品推荐
相关产品推荐

