如何按保留一行丢弃一行的方式将DataFrame精简至原规模一半?
精简DataFrame至原规模一半的两种实现方法
方法一:按行号交替保留(第1、3、5...行)
这种方法完全匹配你“保留第1行、丢弃第2行”的需求,操作简单且效率极高,适合20万条量级的数据:
方式1:用iloc直接切片
pandas的iloc支持步长索引,因为DataFrame是0基索引,原第1行对应索引0,第3行对应索引2,所以用::2就能每隔一行取一行:
import pandas as pd # 假设你的DataFrame名为df df_reduced = df.iloc[::2]
方式2:布尔掩码筛选
通过判断行索引的奇偶性生成掩码,同样能实现目标:
# 0索引下,原奇数行(第1、3行)的索引为偶数 mask = df.index % 2 == 0 df_reduced = df[mask]
方法二:结合sample与掩码的随机抽样
如果不需要严格按行号交替,只是需要随机保留一半数据,直接用sample最方便:
# frac=0.5表示抽取50%数据,random_state可选,用于固定抽样结果 df_reduced = df.sample(frac=0.5, random_state=42)
要是想用掩码手动实现随机抽样,可以用numpy生成随机布尔数组:
import numpy as np # 生成等概率的True/False掩码,True的占比约50% mask = np.random.choice([True, False], size=len(df), p=[0.5, 0.5]) df_reduced = df[mask]
内容的提问来源于stack exchange,提问作者user15516822
相关产品推荐
相关产品推荐

