在Pandas中,NaN代表浮点数的缺失值,而NaT代表时间戳(datetime)类型的缺失值。处理这两者的方法类似,但具体操作可能会有所不同。以下是一些常见的处理方法:
使用isna()
或isnull()
函数可以检测DataFrame中的NaN和NaT值。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': ['a', 'b', pd.NaT]
})
print(df.isna())
使用fillna()
方法可以填充NaN和NaT值。
# 使用常数填充
df.fillna(0, inplace=True)
# 使用前一个值或后一个值填充
df.fillna(method='ffill', inplace=True) # 前一个值
df.fillna(method='bfill', inplace=True) # 后一个值
# 使用平均值、中位数等统计量填充
df['A'].fillna(df['A'].mean(), inplace=True)
df['B'].fillna(df['B'].median(), inplace=True) # 注意:对于非数值型列,这里用中位数可能不合适,应根据实际情况选择合适的统计量
使用dropna()
方法可以删除包含NaN或NaT的行。
df.dropna(inplace=True)
对于时间序列数据或具有某种趋势的数据,可以使用插值方法填充缺失值。
df['B'].interpolate(inplace=True)
对于时间戳类型的列,还可以使用pd.to_datetime()
函数的errors='coerce'
参数将无法解析为时间戳的值转换为NaT。
s = pd.Series(['2023-01-01', 'not a date'])
s = pd.to_datetime(s, errors='coerce')
print(s)
这将输出:
0 2023-01-01
1 NaT
dtype: datetime64[ns]
领取专属 10元无门槛券
手把手带您无忧上云