PYTHON 最流行库:Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库,由于代码是基于数学公式运行的,因此就会使用到它。Maplotlib(具体而言,Matplotlib.pyplot)则是满足绘图所需要的库。Pandas 则是最好的导入并处理数据集的一个库。对于数据预处理而言,Pandas 和 Numpy 基本是必需的。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
创建保存自变量的矩阵
X = dataset.iloc[:, :-1].values
第一个冒号表示提取数据集的全部行,「:-1」则表示提取除最后一列以外的所有列。最后的「.values」表示希望提取所有的值;
创建保存因变量的向量,取数据的最后一列
y = dataset.iloc[:, 3].values
一、数据描述
1.1 info()函数
info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。
#(1)定义一个Dataframe
int_values = [1, 2, 3, 4, 5]
text_values = ['alpha', 'beta', 'gamma', 'delta', 'epsilon']
float_values = [0.0, 0.25, 0.5, 0.75, 1.0]
df = pd.DataFrame({
"int_col": int_values, "text_col": text_values,
"float_col": float_values})
df
'''
int_col text_col float_col
0 1 alpha 0.00
1 2 beta 0.25
2 3 gamma 0.50
3 4 delta 0.75
4 5 epsilon 1.00
'''
df.info(verbose=True)
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
int_col 5 non-null int64
text_col 5 non-null object
float_col 5 non-null float64
dtypes: float64(1), int64(1), object(1)
memory usage: 248.0+ bytes
'''
1.2 describe()函数
describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。
df.describe()
'''
float_col int_col
count 5.000000 5.000000
mean 0.500000 3.000000
std 0.395285 1.581139
min 0.000000 1.000000
25% 0.250000 2.000000
50% 0.500000 3.000000
75% 0.750000 4.000000
max 1.000000 5.000000
'''
二、缺失值处理
类型 | 描述 |
---|---|
缺失值类型 | 1) na.nan ,float类型 ,它不等于任何值,连自己都不相等。如果用nan和任何其它值比较都会返回nan,因为nan在Numpy中的类型是浮点,因此整型列会转为浮点;而字符型由于无法转化为浮点型,只能归并为object类型(‘O’),原来是浮点型的则类型不变。 2)none,与自己相等。None == None>> True 3)pd.NA 不改变原有数据类型,它代表空整数、空布尔值、空字符 |
缺失值判断 | 1)isnull() ; 2)isna() ; 3)notna(); |
缺失值统计 | 1)列缺失:isnull().sum(axis=0) ;2)行缺失:isnull().sum(axis=1);3)缺失率:isnull().mean(); |
缺失值筛选 | 1)行筛选:df.loc[df.isnull().any(1)];2)列筛选:df.loc[:,df.isnull().any()] |
缺失值填充 | 1)全部填充:fillna();2)向前填充:ffill();3)向后填充:dfill();4)填充平均值:df.D.fillna(df.D.mean()) |
缺失值删除 | 1)全部删除:df.dropna();2)行删除:df.dropna(axis = 0);3)列删除:df.dropna(axis = 1);按缺失率删除:df.loc[:,df.isnull().mean(axis=0)<0.1] |
缺失值参与计算 | 1)加法:加法会忽略缺失值;2)累加:cumsum累加会忽略NA,但值会保留在列中,可以使用skipna=False跳过有缺失值的计算并返回缺失值。;3)计数:缺失值不进入计数范围里;4)聚合分组 |
pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。
方法 | 说明 |
---|---|
dropna | 根据各标签的值中是否存在缺失值对轴标签进行过滤,可通过阈值调节对缺失值的容忍度 |
fillna | 用指定值或插值方法(如ffill或bfill)填充缺失数据 |
isnull | 返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值/NA,该对象的类型与源类型一样 |
notnull | isnull的否定式 |
isna/isnull/info()
判断是不是缺失值:
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
print(df)
'''
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN NaN 5
3 NaN 3.0 NaN 4
'''
df.isna() ##df.isnull()
'''
A B C D
0 True False True False
1 False False True False
2 True True True False
3 True False True False
'''
df.isna().sum() ##df.isnull().sum() df.isnull().mean() 缺失率
'''
A 3
B 0
C 4
D 0
dtype: int64
'''
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
A 1 non-null float64
B 4 non-null object
C 0 non-null float64
D 4 non-null int64
dtypes: float64(2), int64(1), object(1)
memory usage: 208.0+ bytes
'''
#可以看到一共有4行,但是有两列的非空值都不到4行
dropna
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
函数作用:删除含有空值的行或列
- axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
- how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
- thresh:一行或一列中至少出现了thresh个才删除。
- subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
- inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。
df = pd.DataFrame({
"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan