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。