📜  impute 模式 pandas - Python (1)

📅  最后修改于: 2023-12-03 14:42:05.641000             🧑  作者: Mango

Impute模块介绍 - Pandas Python

Impute模块是pandas库中一个数据填充模块,在数据分析和清洗过程中经常用到。该模块提供了一些方法可以用来填充缺失值,这些方法包括:

  • fillna():用指定值或方法填充空数据。
  • interpolate():基于最近的非空数据,通过内插法填充空数据。
  • replace():替换数据中的指定值为其他值。

下面将详细介绍这三种方法。

fillna()

fillna()方法用于填充缺失值,提供了以下参数:

  • value:用于填充空数据的标量值或字典,其中字典的键是要填充的列名,值是用于填充的标量值。
  • method:空数据的填充方法,有以下选项:
    • ‘backfill’‘bfill’:向前填充缺失值。
    • ‘pad’‘ffill’:向后填充缺失值。
  • axis:空数据的填充方向,有以下选项:
    • 0‘index’:按列填充。
    • 1‘columns’:按行填充。
  • inplace:是否在原始DataFrame对象中填充空数据,有以下选项:
    • 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()

interpolate()方法通过内插法在最近的非空数据中填充缺失值,提供了以下参数:

  • method:内插法的类型,有以下选项:
    • ‘linear’:线性内插法,根据数据点之间的线性关系进行内插。
    • ‘time’:时间内插法,用于时间序列数据的内插。
    • ‘index’‘values’:可用于指定索引或值的内插法。
  • axis:内插法的方向,有以下选项:
    • 0‘index’:按列填充。
    • 1‘columns’:按行填充。
  • limit_direction:指定限制内插法的方向,有以下选项:
    • ‘forward’‘backward’:限制向前或向后进行内插。
  • inplace:是否在原始DataFrame对象中填充空数据,有以下选项:
    • 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()

replace()方法用于替换DataFrame中指定的值,提供了以下参数:

  • to_replace:要替换的值,可以是标量、列表、字典或正则表达式。
  • value:用于替换的新值,可以是标量、字典或Series对象。
  • regex:指定to_replace是否为正则表达式。
  • method:指定替换方法,有以下选项:
    • ‘pad’‘ffill’:用前一个值替换NaN。
    • ‘backfill’‘bfill’:用下一个值替换NaN。
  • limit:指定要替换的最大数量。
  • inplace:是否在原始DataFrame对象中进行替换,有以下选项:
    • 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)

以上三种方法可以根据实际情况使用,进行数据填充和值替换的操作,以满足数据分析和数据清洗的需求。