在Python中进行数据清洗和预处理时,处理缺失值是常见任务之一。以下是如何使用pandas库来剔除缺失值(NaN)的基本方法:
方法一:直接删除包含缺失值的行
如果你想从数据集中完全移除任何含有缺失值的记录,可以使用dropna()
函数:
import pandas as pd
# 假设df是你的DataFrame
df = pd.DataFrame({
'column1': [1, 2, np.nan],
'column2': [4, np.nan, 6],
'column3': [7, 8, 9]
})
# 删除任何含有NaN的行
df_cleaned = df.dropna()
# 如果你想只删除含有NaN的列,可以指定axis=1
df_cleaned_columns = df.dropna(axis=1)
方法二:按列删除缺失值
如果你只想删除那些缺失值超过一定比例的列,可以结合阈值参数thresh
:
# 确定一个最少非缺失值的个数阈值,例如至少有2个非缺失值
t = len(df) - int(0.2 * len(df)) # 这里是保留80%以上的非空行
# 删除满足条件的列
df_cleaned_columns_by_threshold = df.dropna(thresh=t, axis=1)
方法三:填充缺失值而不是删除
如果你不希望删除数据而是选择填充缺失值,可以使用fillna()
函数:
# 使用特定值填充缺失值,比如用0填充
df_filled = df.fillna(0)
# 或者使用前一个或后一个非缺失值填充(向前/向后填充)
df_filled_forward = df.fillna(method='ffill')
df_filled_backward = df.fillna(method='bfill')
# 也可以根据每个列的统计特性填充,如均值、中位数或众数
df_filled_mean = df.fillna(df.mean()) # 填充各列平均值
df_filled_median = df.fillna(df.median()) # 填充各列中位数
选择哪种方法取决于你的具体需求以及缺失值出现的情况,通常需要结合业务背景和分析目标来决定最佳策略。