Pandas fillna()函数的使用
在数据处理和分析中,经常会遇到缺失值的问题。pandas 提供了一个非常有用的函数 fillna()
来处理 DataFrame 中的缺失值。本文将详细介绍 fillna()
函数的使用方法,并通过多个示例代码展示如何在不同情况下使用该函数。
1. fillna() 函数概述
fillna()
函数用于填充 DataFrame 中的缺失值。该函数可以指定一个标量值来填充所有缺失值,或者可以指定一个字典/序列来对不同的列指定不同的填充值。此外,fillna()
还支持前向填充(用前一个非缺失值填充)和后向填充(用后一个非缺失值填充)。
函数的基本语法如下:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
value
: 要填充的值,可以是标量,字典,序列,或 DataFrame。method
: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None},填充方法。axis
: {0 or ‘index’, 1 or ‘pandasdataframe.com’},沿着哪个轴填充。inplace
: 如果为 True,则在原地修改 DataFrame,不创建新的 DataFrame。limit
: 如果指定了方法,则这是连续的 NA 值的前向/后向填充的最大数量。
2. 填充标量值
示例代码 1: 填充一个常数
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, np.nan, 3],
'B': [4, 5, np.nan]
})
df.fillna(0)
print(df)
Output:
示例代码 2: 使用不同的常数填充不同的列
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan],
'B': [np.nan, np.nan, 6]
})
df.fillna({'A': 1, 'B': 5})
print(df)
Output:
3. 使用方法参数
示例代码 3: 前向填充
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan],
'B': [1, np.nan, 3]
})
df.fillna(method='ffill')
print(df)
示例代码 4: 后向填充
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, np.nan, 3],
'B': [4, np.nan, np.nan]
})
df.fillna(method='bfill')
print(df)
4. 结合 axis 使用
示例代码 5: 沿着列方向前向填充
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan],
'B': [1, np.nan, 3],
'C': [np.nan, np.nan, np.nan]
})
df.fillna(method='ffill', axis=0)
print(df)
示例代码 6: 沿着行方向后向填充
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, np.nan, 3],
'B': [4, np.nan, np.nan],
'C': [7, 8, 9]
})
df.fillna(method='bfill', axis=1)
print(df)
5. 使用 limit 参数
示例代码 7: 限制前向填充的数量
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan, np.nan, 5],
'B': [1, np.nan, 3, np.nan, np.nan]
})
df.fillna(method='ffill', limit=1)
print(df)
示例代码 8: 限制后向填充的数量
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, np.nan, 3, np.nan, np.nan],
'B': [4, np.nan, np.nan, 8, 9]
})
df.fillna(method='bfill', limit=1)
print(df)
6. 结合多个参数使用
示例代码 9: 结合 value 和 method 使用
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan],
'B': [1, np.nan, 3]
})
df.fillna(value=0, method='ffill')
print(df)
示例代码 10: 结合 axis 和 limit 使用
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, np.nan, 3, np.nan, 5],
'B': [4, np.nan, 6, np.nan, 8]
})
df.fillna(method='ffill', axis=0, limit=1)
print(df)
7. 在实际数据集中应用 fillna()
示例代码 11: 处理实际数据集中的缺失值
import pandas as pd
import numpy as np
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, np.nan, 22, np.nan, 29],
'Salary': [np.nan, 50000, np.nan, 45000, 52000]
}
df = pd.DataFrame(data)
df.fillna({'Age': df['Age'].mean(), 'Salary': df['Salary'].median()})
print(df)
Output:
示例代码 12: 使用不同方法填充不同列
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [np.nan, 2, np.nan],
'B': [1, np.nan, 3],
'C': [np.nan, np.nan, np.nan]
})
df.fillna({'A': df['A'].mean(), 'B': df['B'].median(), 'C': 0})
print(df)
Output:
8. 总结
在本文中,我们详细介绍了 pandas 的 fillna()
函数,展示了如何使用不同的参数来填充 DataFrame 中的缺失值。通过多个示例代码,我们演示了如何在不同情况下使用 fillna()
来处理数据。希望本文能帮助读者更好地理解和使用 pandas 处理缺失数据的功能。