快乐学习
前程无忧、中华英才非你莫属!

原创-Pandas心法之处理丢失数据-3

"""
# 6、处理丢失数据
"""
# 现实世界中的数据很少是干净且同质的。特别是,许多有趣的数据集将丢失一些数据

import numpy as np
import pandas as pd

# 第一种:缺少的数据为None
vals1 = np.array([1, None, 3, 4])
print(vals1)

# 因为数组里面有None控制,so,聚合函数报错
print(vals1.sum()) # 报错

# 第二种:另一个缺少的数据表示形式NaN
vals2 = np.array([1, np.nan, 3, 4])
print(vals2)
print(vals2.dtype)

# 这种缺失的数据,在计算和聚合的时候不会错误
print(1 + np.nan)
print(0 * np.nan)

# 使用nan式聚合函数
print(np.sum(vals2)) # 错误
print(np.nansum(vals2))
print(np.nanmin(vals2))

# NaN and None in Pandas¶
# 在pandas 里面None 和nan d都统一处理NaN
print(pd.Series([1, np.nan, 2, None]))
x = pd.Series(range(2), dtype=int)
print(x)
x[0] = None
print(x)

# 对空值进行处理
'''
isnull():生成一个布尔值掩码,指示缺少的值
notnull(): 的反面 isnull()
dropna():返回过滤后的数据版本
fillna():返回填充或估算缺失值的数据副本

'''

# 检查空值
data = pd.Series([1, np.nan, 'hello', None])

# 为空的布尔数组
print(data.isnull())

# 为空的数据
print(data[data.isnull()])

# 不为空的数据
print(data[data.notnull()])

# 删除空值
print(data.dropna())

# DataFrame 的空值处理
df = pd.DataFrame([[1, np.nan, 2],
                   [2, 3, 5],
                   [np.nan, 4, 6]])
print(df)

print('----------------')
print(df.dropna()) # 暴力的只要行中包括na就全行删除。

print(df.dropna(axis='columns')) # 只要列中包括na,就删除整列

# 增加一列全是nan的
df[3] = np.nan
print(df)
print('----------------')

# 删除某一列中全是nan 的数据
print(df.dropna(axis='columns', how='all'))

# 删除每行少于3个非空值的数据 ,thresh 为控制参数
print(df.dropna(axis='rows', thresh=3))
# 此处的第一行和最后一行已删除,因为它们仅包含两个非空值

# 填充空值,一味的删除也不是个办法
# 有时,您宁可使用有效值替换它们,也不要丢弃NA值
data = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
print(data)
# 把空值都填充为零
print(data.fillna(0))

# 把空值填充为上一行不为空的值,叫向前填充
print(data.fillna(method='ffill'))

# 把空值填充为下一行不为空的值,叫向后填充
print(data.fillna(method='bfill'))

print(df)
print('-------')
print(df.fillna(method='ffill', axis=1)) # 沿X轴方向向前填充

# 请注意,如果在向前填充过程中先前值不可用,则NA值将保留。
打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » 原创-Pandas心法之处理丢失数据-3

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!