Pandas fillna()方法的使用
在数据分析中,处理缺失值是一个常见的任务,pandas 提供了多种方法来处理 DataFrame 中的缺失值。fillna()
方法是 pandas 中用来填充缺失值的一个非常有用的函数。本文将详细介绍 fillna()
方法的使用,包括其语法、参数以及多个实际的示例代码。
1. fillna()
方法简介
fillna()
方法用于填充 DataFrame 中的 NaN 值。这个方法提供了多种填充方式,包括使用常数值填充、前向填充、后向填充等。使用 fillna()
可以很方便地处理数据中的缺失值,提高数据的质量。
2. fillna()
方法的语法
fillna()
方法的基本语法如下:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
参数说明:
- value: 标量、字典、序列或 DataFrame。用于填充缺失值的值。
- method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。填充方法。
- axis: {0 or ‘index’, 1 or ‘columns’}。沿着哪个轴填充。
- inplace: bool,默认为 False。如果为 True,则在原地修改数据。
- limit: int,默认为 None。如果方法是 pad 或 ffill,则这是连续的填充的最大数量;如果方法是 backfill 或 bfill,则这是连续的填充的最大数量。
- downcast: dict,默认为 None。一个字典,其键是列名,其值是 numpy 数据类型。如果可能,将尝试将列转换为这些类型。
3. 使用常数值填充
示例代码 1: 使用单一常数填充所有缺失值
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(0)
print(df)
Output:
示例代码 2: 使用字典为不同列指定不同的填充值
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna({'Age': 20, 'City': 'Unknown'})
print(df)
Output:
4. 使用前向填充或后向填充
示例代码 3: 使用前向填充
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='ffill')
print(df)
示例代码 4: 使用后向填充
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='bfill')
print(df)
5. 使用 axis
参数
示例代码 5: 沿着列轴进行前向填充
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='ffill', axis=1)
print(df)
示例代码 6: 沿着行轴进行后向填充
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='bfill', axis=0)
print(df)
6. 使用 limit
参数控制填充数量
示例代码 7: 限制前向填充的数量
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, np.nan, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='ffill', limit=1)
print(df)
示例代码 8: 限制后向填充的数量
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, np.nan, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(method='bfill', limit=1)
print(df)
7. 使用 inplace
参数
示例代码 9: 在原地修改 DataFrame
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, np.nan, 22, 25],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(0, inplace=True)
print(df)
Output:
8. 使用 downcast
参数
示例代码 10: 尝试向下转换数据类型
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24.0, np.nan, 22.0, 25.0],
'City': ['New York', 'Los Angeles', 'Chicago', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df.fillna(0, downcast={'Age': 'int'})
print(df)
以上是 fillna()
方法的详细介绍和多个实用的示例代码。通过这些示例,可以看到 fillna()
方法在处理缺失值时的灵活性和强大功能。在实际的数据处理过程中,根据数据的具体情况选择合适的参数,可以有效地解决缺失值问题。