📅  最后修改于: 2023-12-03 14:42:05.641000             🧑  作者: Mango
Impute模块是pandas库中一个数据填充模块,在数据分析和清洗过程中经常用到。该模块提供了一些方法可以用来填充缺失值,这些方法包括:
下面将详细介绍这三种方法。
fillna()方法用于填充缺失值,提供了以下参数:
‘backfill’
或 ‘bfill’
:向前填充缺失值。‘pad’
或 ‘ffill’
:向后填充缺失值。0
或 ‘index’
:按列填充。1
或 ‘columns’
:按行填充。False
:返回一个新的DataFrame对象,不改变原始对象。True
:在原始对象中填充空数据,不返回一个新的DataFrame对象。import pandas as pd
import numpy as np
# 创建一个包含缺失值的DataFrame对象
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [np.nan, 5, 6], 'C': [7, np.nan, 9]})
print(df)
# 用指定值填充空数据
filled_df = df.fillna(0)
print(filled_df)
# 向前填充缺失值
backfilled_df = df.fillna(method='bfill')
print(backfilled_df)
# 向后填充缺失值
pad_df = df.fillna(method='pad')
print(pad_df)
# 给不同的列填充不同的值
value_dict = {'A': 1, 'B': 2, 'C': 3}
value_df = df.fillna(value=value_dict)
print(value_df)
# 原地修改
df.fillna(value=value_dict, inplace=True)
print(df)
interpolate()方法通过内插法在最近的非空数据中填充缺失值,提供了以下参数:
‘linear’
:线性内插法,根据数据点之间的线性关系进行内插。‘time’
:时间内插法,用于时间序列数据的内插。‘index’
或 ‘values’
:可用于指定索引或值的内插法。0
或 ‘index’
:按列填充。1
或 ‘columns’
:按行填充。‘forward’
或 ‘backward’
:限制向前或向后进行内插。False
:返回一个新的DataFrame对象,不改变原始对象。True
:在原始对象中填充空数据,不返回一个新的DataFrame对象。import pandas as pd
import numpy as np
# 创建一个包含缺失值的DataFrame对象
df = pd.DataFrame({'A': [1, np.nan, 3], 'B': [np.nan, np.nan, 6], 'C': [7, np.nan, 9]})
print(df)
# 线性内插法
linear_inter_df = df.interpolate(method='linear')
print(linear_inter_df)
# 时间内插法
time_inter_df = pd.DataFrame({'time': pd.date_range('2022-01-01', periods=3), 'value': [1, np.nan, 3]})
time_inter_df = time_inter_df.set_index('time')
time_inter_df = time_inter_df.interpolate(method='time')
print(time_inter_df)
# 原地修改
df.interpolate(method='linear', inplace=True)
print(df)
replace()方法用于替换DataFrame中指定的值,提供了以下参数:
‘pad’
或 ‘ffill’
:用前一个值替换NaN。‘backfill’
或 ‘bfill’
:用下一个值替换NaN。False
:返回一个新的DataFrame对象,不改变原始对象。True
:在原始对象中进行替换,不返回一个新的DataFrame对象。import pandas as pd
import numpy as np
# 创建一个DataFrame对象
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df)
# 替换指定值为新值
df = df.replace({1: np.nan, 4: 0})
print(df)
# 用前一个值替换NaN
pad_df = df.replace({np.nan: None})
pad_df.fillna(method='pad', inplace=True)
print(pad_df)
# 用下一个值替换NaN
backfill_df = df.replace({np.nan: None})
backfill_df.fillna(method='backfill', inplace=True)
print(backfill_df)
# 原地修改
df.replace({1: np.nan, 4: 0}, inplace=True)
print(df)
以上三种方法可以根据实际情况使用,进行数据填充和值替换的操作,以满足数据分析和数据清洗的需求。