哎,你说搞数据分析,最头疼的是啥?八成就是那堆缺失值!看着一堆 NaN 或者 None 杵在那儿,感觉代码都写不下去了。别慌,今天就来聊聊 Python 怎么填充这些坑,让你填得又快又好。

最最基础的,肯定是简单粗暴的填充。比如说,你想把所有空值都变成 0,那就直接:

“`python
import pandas as pd
import numpy as np

创建一个包含缺失值的 DataFrame

data = {‘col1’: [1, 2, np.nan, 4, 5],
‘col2’: [6, np.nan, 8, 9, 10],
‘col3’: [11, 12, 13, np.nan, 15]}
df = pd.DataFrame(data)

df.fillna(0, inplace=True) #直接填充
print(df)
“`

fillna() 这个函数是 Pandas 的神器,第一个参数就是你想填进去的值。inplace=True 意思就是直接修改原始的 DataFrame,不用再赋值给一个新的变量了,懒人必备!

不过,直接填 0 有时候不太靠谱。想象一下,你的数据是房价,你把空着的房价都填成 0,那模型肯定得跑偏啊!所以,更常用的方法是均值填充或者中位数填充

“`python

均值填充

df = pd.DataFrame(data) # 重新加载数据
df[‘col1’].fillna(df[‘col1’].mean(), inplace=True)

中位数填充

df[‘col2’].fillna(df[‘col2’].median(), inplace=True)
print(df)
“`

mean() 算平均值,用 median() 算中位数,然后再填进去,是不是感觉专业多了?

但有时候,更精细的活儿还得靠向前填充向后填充。啥意思呢?就是用缺失值前面的值或者后面的值来填。

“`python
df = pd.DataFrame(data) # 重新加载数据

向前填充

df.fillna(method=’ffill’, inplace=True) #ffill 是 forward fill 的缩写
print(df)

df = pd.DataFrame(data) # 重新加载数据

向后填充

df.fillna(method=’bfill’, inplace=True) #bfill 是 backward fill 的缩写
print(df)

“`

想象一下,你有个时间序列数据,记录的是每天的温度。如果某一天的数据丢了,用前一天的温度或者后一天的温度来估计,是不是比填 0 或者均值靠谱?

再说点高级的,插值填充。这玩意儿就厉害了,它会根据已有的数据点,用数学公式(比如线性插值、多项式插值)来估算出缺失值。

“`python
df = pd.DataFrame(data) # 重新加载数据
df.interpolate(inplace=True)
print(df)

可以指定差值方法,例如线性插值

df.interpolate(method=’linear’, inplace=True)

“`

interpolate() 函数就是干这个的,它默认用线性插值,你也可以指定其他方法。这种方法适合数据变化比较平滑的情况,填出来的空值更自然。

哎,等等,是不是忘了点啥?如果你的数据是分类变量,比如颜色、性别、地区等等,那可不能用均值或者中位数来填啊!这时候,可以用众数填充,也就是用出现次数最多的类别来填。

“`python

创建一个包含分类变量和缺失值的 DataFrame

data = {‘col1’: [‘A’, ‘B’, np.nan, ‘A’, ‘C’],
‘col2’: [1, 2, 3, np.nan, 5]}
df = pd.DataFrame(data)

众数填充

df[‘col1’].fillna(df[‘col1’].mode()[0], inplace=True) #mode()返回的是一个Series,取第一个值才是众数
print(df)
“`

mode() 函数可以找出 DataFrame 里出现次数最多的值,然后填进去就行了。

还有一种更骚气的操作,就是用模型预测来填充缺失值。你可以用机器学习模型(比如回归模型、分类模型)来预测缺失值,这需要你把包含缺失值的列当成目标变量,其他列当成特征,训练一个模型,然后用这个模型来预测缺失值。这种方法比较复杂,但效果也往往最好。

但话说回来,填空不是万能的。有时候,与其费劲巴拉地填空,还不如直接把包含缺失值的行或者列给删了。当然,这得看你的数据量和缺失值的比例。如果缺失值太多,或者删除会导致数据严重失真,那还是得老老实实地填空。

总结一下,Python 怎么填充缺失值的方法有很多,你需要根据数据的类型、缺失的比例以及你的业务需求来选择合适的方法。记住,没有最好的方法,只有最适合的方法。填空也是一门艺术,需要你不断地尝试和探索,才能找到最完美的解决方案。填充的时候,一定要结合你的数据和背景知识,想想这个值合不合理,有没有可能引入新的偏差。别盲目地用代码,多动动脑子! 哎,写了这么多,希望对你有帮助吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。