使用Python的DataFrame处理丢失数据

import numpy as np
from pandas import DataFrame, Series
import pandas as pd

# 处理丢失数据  有两种丢失数据:
''' 
1)None 是Python自带的,其类型为python object。因此,None不能参与到任何计算中
  object类型的运算要比int类型的运算慢的多,计算不同类型数据求和时间
2)np.nan(NaN) 是浮点类型,能参与到计算中。但计算的结果总是NaN。但可以使用np.nan*()函数来计算
  nan,此时视nan为0。
'''
n1 = np.arange(0, 500, dtype=int).sum()   # arange()创建0-500的数据
print(n1)


# pandas中的None和NaN
'''1)pandas中None与np.nan都视为np.nan'''
# 创建DataFrame
df = DataFrame({"age": [18, 16, 20, 22, 24], "salary": [10000, 26555, 20000, 15000, 23000]},
               index=["张三", "李四", "王五", "小赵", "小吕"],
               columns=["age", "salary", "work"])
print(df)

# 使用DataFrame行索引与列索引修改DataFrame数据
df.work["李四":"小赵"] = "Python"
print(df)


'''2)pandas中的None与np.nan的操作
----isnull()
----notnull()
----dropna():过滤丢失数据
----fillna():填充丢失数据
'''


# (1)判断函数  isnull()   notnull()
# 根据获得的数据去除原来数据的空数据
print(df.isnull())

s1 = df.isnull().any(axis=1)   # any只要有一个为空,则返回True
# 有了s1数据,可以获取哪些数据为空
print(df[s1])

# 保留非空数据  notnull():判断数据不为空,限定所有的数据都不为空,all()
s2 = df.notnull().all(axis=1)   # all表示一行数据全部为True,才能返回True
print(df[s2])


# (2)过滤函数  dropna():过滤丢失数据  可以选择过滤的是行还是列(默认是行)
print(df.dropna(axis=1))   # 直接过滤丢失数据
print(df.dropna(axis=0))

# 也可以选择过滤的方式 how = 'all'
df.loc["张三"] = np.nan
df.loc["小吕"] = np.nan
print(df.dropna(how="all"))


# (3)填充函数Series/DataFrame    fillna()
# 对所有的空数据进行了替换
print(df.fillna(value="Java"))

# 可以选择向前填充或者向后填充
print(df.fillna(method="ffill"))    # forward向前填充
print(df.fillna(method="backfill"))    # 向后填充
# inplace=True原来的数据就会发生变化
df.fillna(method="backfill", inplace=True)
print(df)

# 对于DataFrame来说,还要选择填充的轴axis。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章